全部产品
Search
文档中心

Hologres:Standar pengembangan Hologres

更新时间:Jul 02, 2025

Topik ini menjelaskan standar pengembangan Hologres. Dengan mematuhi standar ini, Anda dapat mencegah kesalahan operasional.

Domain data

  • Lapisan Data

    Gudang data dibagi menjadi lapisan penyimpanan data operasional (ODS), model data umum (CDM), dan penyimpanan data aplikasi (ADS). Lapisan CDM terdiri dari lapisan detail gudang data (DWD), layanan gudang data (DWS), dan lapisan data dimensi (DIM). Di Hologres, lapisan dibedakan berdasarkan skema.

    • ODS (Operational Data Store)

    • CDM (Common Data Model)

      • DWD (Data Warehouse Detail)

      • DWS (Ringkasan Gudang Data)

      • DIM (Dimensi)

    • ADS (Layanan Data Aplikasi)

    Anda dapat membagi gudang data perusahaan ke dalam lapisan pada tingkat yang berbeda. Jika perusahaan memiliki unit bisnis yang berbeda, Anda dapat membagi gudang data berdasarkan unit bisnis dan menggunakan singkatan nama unit bisnis sebagai awalan skema untuk membedakan lapisan.

    create schema ${bu}_ads;
    create schema ${bu}_ads_dev;
    create schema ${bu}_dwd;
    create schema ${bu}_dwd_dev;
    create schema ${bu}_dws;
    create schema ${bu}_dws_dev;
    create schema ${bu}_dim;
    create schema ${bu}_dim_dev;
    create schema ${bu}_ods;
    create schema ${bu}_ods_dev;
  • Singkatan Domain Data

    Kami menyarankan Anda menentukan singkatan untuk setiap domain data dan menerapkan penggunaannya secara konsisten di seluruh perusahaan. Tabel berikut menjelaskan beberapa singkatan domain data yang dapat digunakan.

    Domain data

    Contoh singkatan

    Transaksi

    trd

    Produk

    itm

    Log

    log

    Anggota dan toko

    mbr

    Pengadaan, stok, dan manajemen penjualan

    dst

    Penjualan dan layanan pelanggan

    crm

    Kredit dan kontrol risiko

    rsk

    Alat dan layanan

    tls

    Logistik dan pengiriman ekspres

    lgt

Konvensi penamaan

  • Tugas

    Untuk membedakan antara tugas internal dan sinkronisasi, gunakan konvensi penamaan berikut:

    • Tugas SQL asinkron internal: holo_{target_table_name}. Ini membedakan tugas SQL internal dari tugas yang melibatkan tabel eksternal.

    • Tugas impor data: {source}2holo_{target_table_name}.

    • Tugas ekspor data: holo2{target}_{target_table_name}.

  • Tabel

    Lapisan

    Format

    Contoh

    DWD

    ${bu}_dwd.Data domain_Business process_[Custom root]_Suffix

    taobao_dwd.trd_ord_flow

    DWS

    ${bu}_dws.Data domain_Abbreviated statistic granularity_Business process_[{Custom root}]_Statistical period

    taobao_dws.trd_all_dtr, taobao_dws.log_slr_pv_dtr

    DIM

    ${bu}_dim.{Dimension}[_{Custom root}]

    taobao_cdm.dim_itm

    ADS

    ${bu}_ads.Business domain_Dimension_[{Custom root}]_{Update frequency}

    Catatan

    Nilai valid untuk variabel Frekuensi Pembaruan:

    • d: pembaruan harian

    • r: pembaruan real-time

    • h: pembaruan quasi-real-time

    taobao_ads.trd_cate_d

  • Grup Tabel

    Jika Anda memerlukan beberapa grup tabel, gunakan format berikut untuk menamai grup tabel: ${bu}_{Layer}_{Business}_tg.

  • Tampilan

    Gunakan format berikut untuk memberi nama tampilan:

    • Format

      • DWS: ${bu}_dws.Data domain_Abbreviated statistic granularity_Business process_[{Custom root}]_Statistical period_v

      • ADS: ${bu}_ads.Business domain_Dimension_[{Custom root}]_{Update frequency}_v

    • Contoh

      taobao_dws.trd_byr_itm_ord_cm_v
  • Tabel Asing

    Gunakan nama tabel MaxCompute sumber dengan akhiran ext sebagai nama tabel asing. Contoh:

    taobao_dim.camp_ext
  • Tabel Sementara

    Gunakan nama tabel asli dengan awalan tmp dan akhiran nomor urut sebagai nama tabel sementara. Contoh:

    taobao_dim.tmp_camp_01
  • Singkatan

    Periode statistik

    Singkatan

    Hari terakhir

    1d

    N hari terakhir

    nd

    Total hari

    td

    Minggu kalender

    cw

    Bulan kalender

    cm

    Akumulasi hingga hari ini

    dtr

    Akumulasi hingga jam ini

    dhr

Standar konfigurasi tabel

  • Tabel Internal

    Saat membuat tabel internal, patuhi konvensi penamaan untuk tabel dan bidangnya. Selain itu, atur siklus hidup tabel sesuai kebutuhan bisnis dan tambahkan komentar untuk tabel serta bidangnya. Perhatikan standar dan rekomendasi berikut saat mengonfigurasi tabel internal:

    • Standar yang harus dipatuhi untuk memastikan pembuatan tabel internal berhasil:

      • Tambahkan komentar ringkas dan akurat untuk tabel dan bidangnya untuk memfasilitasi pengembangan dan analisis data.

      • Tentukan properti time_to_live_in_seconds dalam pernyataan yang digunakan untuk membuat tabel. Properti ini menentukan siklus hidup tabel.

      • Tentukan properti distribute_key dalam pernyataan yang digunakan untuk membuat tabel. Properti ini menentukan kunci distribusi.

        Pilih kunci distribusi dengan kardinalitas cukup dan sering digunakan untuk operasi JOIN dan GROUP BY. Misalnya, dalam tabel yang menyimpan data produk, pilih bidang user_id dan item_id sebagai kunci distribusi. Namun, jika bidang user_id lebih sering digunakan untuk menggabungkan data, pilih hanya bidang user_id sebagai kunci distribusi.

      • Buat tabel yang terlibat dalam kueri join dalam grup tabel yang sama.

      • Gunakan nama dan tipe data yang sama untuk ID entitas yang sama di semua tabel fakta dan tabel dimensi. Misalnya, jika Anda menentukan user_id sebagai ID pengguna dalam tabel transaksi, gunakan juga user_id daripada uid sebagai ID pengguna dalam tabel dimensi. Konsistensi dalam tipe data menghilangkan kebutuhan untuk mengonversi tipe data.

      • Gunakan ds untuk bidang partisi semua tabel fisik.

    • Rekomendasi

      • Tentukan salah satu properti bitmap_columns, segment_key, atau cluster_key dalam pernyataan yang digunakan untuk membuat tabel.

      • Jangan tentukan properti dictionary_encoding_columns jika Anda tidak yakin tentang kardinalitas bidang dalam tabel. Properti ini digunakan untuk membangun pemetaan kamus. Anda dapat melewati pemetaan kamus dengan mengeksekusi pernyataan berikut:

        call set_table_property('table_name', 'dictionary_encoding_columns','')
      • Atur properti orientation ke column untuk mengatur tabel sebagai tabel berorientasi kolom. Jenis penyimpanan row-oriented juga didukung oleh Hologres.

        Catatan

        Jangan atur tabel sebagai tabel berorientasi baris kecuali semua kolom kunci utama tabel dapat ditentukan dalam setiap kueri pada tabel dengan menggunakan operator sama dengan atau IN. Secara default, jika properti orientation tidak ditentukan, jenis penyimpanan column-oriented digunakan.

      • Atur properti bitmap_columns. Properti ini menentukan bidang tempat Hologres membangun indeks bitmap. Indeks bitmap dapat digunakan untuk menyaring data yang disimpan.

        • Kami menyarankan Anda mengonversi kondisi filter menjadi indeks bitmap. Secara default, indeks bitmap dibangun untuk semua bidang tipe TEXT.

        • Hindari menentukan bidang dengan sejumlah besar nilai untuk properti ini, seperti bidang user_id. Sebagai gantinya, tentukan bidang seperti activity_id.

      • Atur properti event_time_column ke bidang yang digunakan untuk penulisan data real-time, seperti bidang yang menyimpan timestamp acara.

      • Atur properti clustering_key ke bidang tempat Hologres membangun indeks terkluster. Hologres mengurutkan data berdasarkan indeks terkluster. Anda dapat mempercepat kueri RANGE dan FILTER pada bidang indeks dengan menggunakan indeks terkluster. Hanya satu indeks terkluster yang didukung untuk setiap tabel. Properti ini tersedia untuk menyaring data berdasarkan rentang. Misalnya, properti ini dapat digunakan untuk distribusi volume merchandise bruto (GMV).

  • Tabel Asing

    Hologres memungkinkan Anda menggunakan tabel asing untuk mempercepat kueri pada data dalam tabel MaxCompute sumber. Ini menyederhanakan proses sinkronisasi data. Untuk meningkatkan kinerja komputasi, kami menyarankan Anda tidak mengaitkan tabel asing dengan tabel internal. Perhatikan standar dan rekomendasi berikut saat mengonfigurasi tabel asing:

    • Standar yang harus dipatuhi: Ikuti konvensi penamaan dan gunakan nama tabel MaxCompute sumber dengan akhiran ext sebagai nama tabel asing.

    • Rekomendasi

      • Pertahankan pernyataan DDL yang digunakan untuk membuat tabel asing dan kelola versi berbeda dari tabel.

      • Jangan mengaitkan tabel asing dengan tabel internal. Sebagai gantinya, sinkronkan data dari tabel asing ke tabel internal.

  • Tampilan

    • Standar yang harus dipatuhi: Ikuti konvensi penamaan.

    • Rekomendasi

      • Jadwalkan tugas untuk mengonfigurasi dependensi dalam seluruh proses bisnis.

      • Buat tampilan individual untuk tabel yang menyimpan data pada granularitas berbeda untuk mengurangi jumlah data dalam komputasi.

        Sebagai contoh, buat tampilan cw (minggu kalender), cm (bulan kalender), nd (N hari), dan 1d (satu hari) untuk empat tabel yang menyimpan data pada granularitas berbeda. Jika tabel menyimpan data untuk terminal berbeda, buat tampilan pc, wap, dan app. Jika tabel menyimpan data untuk metode pengumpulan data berbeda, buat tampilan ut dan non-ut.

  • Siklus Hidup Tabel Internal

    Lapisan

    Siklus hidup yang direkomendasikan

    DWD

    Untuk tabel yang menyimpan data tambahan tingkat hari, kami menyarankan Anda mengatur siklus hidup hingga periode maksimal dua tahun.

    DWS

    Untuk tabel yang menyimpan data tambahan tingkat hari, kami menyarankan Anda mengatur siklus hidup hingga periode maksimal dua tahun.

    DIM

    Untuk tabel dimensi besar yang disimpan dalam mode penyimpanan ultimate, kami menyarankan Anda mengatur siklus hidup ke permanen. Untuk tabel dimensi kecil, kami menyarankan Anda mengatur siklus hidup ke siklus hidup tabel MaxCompute sumber.

    Perbedaan antara tabel dimensi besar dan kecil terletak pada ukuran partisi tunggal. Jika ukuran partisi dalam tabel melebihi 1 TB, tabel tersebut dianggap sebagai tabel dimensi besar.

    Rekomendasi

    Untuk tabel berpartisi, tulis data real-time ke partisi yang dihasilkan pada hari yang sama dan konfigurasikan periode time-to-live (TTL) yang sesuai berdasarkan lapisan. Jangan tulis data yang diperbarui ke partisi yang periode TTL-nya melebihi periode TTL yang ditentukan.

  • Grup Tabel (Opsional)

    Setiap database memiliki grup tabel default dan jumlah shard default. Anda dapat membuat grup tabel atau mengubah jumlah shard berdasarkan kebutuhan bisnis untuk performa yang lebih baik. Rekomendasi:

    • Jangan buat grup tabel kecuali diperlukan.

    • Buat grup tabel dengan jumlah shard besar untuk tabel yang berisi jumlah data besar.

    • Buat grup tabel dengan jumlah shard kecil untuk sejumlah besar tabel yang berisi jumlah data kecil.

    • Letakkan tabel yang terlibat dalam kueri join dalam grup tabel yang sama.

Standar pengaturan bidang

  • Tipe Bidang

    Tabel berikut menjelaskan standar tipe bidang yang harus dipatuhi.

    Nama bidang atau akhiran

    Deskripsi

    Contoh

    Tipe atau format

    user_id

    Bidang ID pengguna auto-increment.

    user_id=232442843

    int8

    item_id

    Bidang tentang produk.

    item_id=63283278784383

    int8

    member_id

    Bidang ID anggota.

    member_id=b2b-dsajk2343821b

    TEXT

    *amt*

    Bidang tentang jumlah.

    pay_ord_amt_1d_001=923.23

    NUMERIC

    *fee*

    Bidang tentang biaya.

    post_fee=923.23

    NUMERIC

    *cnt*

    Bidang tentang kuantitas.

    pay_ord_byr_cnt_1d_001=923

    int4/int8

    is_*

    Bidang Boolean.

    is_pm=Y/is_pm=true

    TEXT/BOOL

    ds

    Bidang partisi.

    ds=20210120

    YYYYMMDD

  • Tipe Data

    Tipe data Hologres kompatibel dengan tipe data PostgreSQL. Hologres mendukung beberapa tipe data PostgreSQL. Untuk informasi lebih lanjut tentang tipe data Hologres dan pemetaan antara tipe data MaxCompute dan Hologres, lihat Tipe Data.

  • Mata Uang dan Presisi

    Di wilayah dalam daratan Tiongkok, gunakan CNY sebagai unit mata uang. Di wilayah lain, gunakan USD sebagai unit mata uang. Kecuali dinyatakan secara khusus, jangan bulatkan data yang terkait dengan jumlah uang. Ini dapat mencegah hasil perhitungan berikutnya tidak konsisten.

Sintaks SQL

  • Standar yang harus dipatuhi:

    • Gunakan pernyataan SELECT * hanya untuk bidang yang perlu dihitung dalam kueri luar dan subquery. Tentukan nama bidang untuk semua operasi.

    • Gunakan ekspresi COALESCE untuk bidang kosong dan string dalam klausa WHERE.

  • Rekomendasi

    • Gunakan metode count (distinct) untuk mengatur kunci distribusi. Jika Anda menggunakan metode count (distinct) beberapa kali, tulis ulang pernyataan tersebut. Contoh:

      select count(distinct userid)
           , count(distinct case when stat_date = '20201111' then userid end) 
      from t group by cate_id;
      
      Tulis ulang pernyataan menjadi:
      select count(1), sum(c) from 
      (
        select userid
             , cate_id
             , cast(count(case when stat_date = '20201111' then 1 end) > 0) as c 
        from t 
        group by cate_id, userid
      ) t1 
      group by cate_id;
    • Eksekusi pernyataan ANALYZE TABLE untuk menganalisis tabel berpartisi untuk tugas penjadwalan offline.

    • Jika tabel Anda diperlukan untuk periode waktu yang lama, gunakan metode detach dan attach untuk mengelola partisi historis guna menghindari perubahan radikal dalam metrik.