全部产品
Search
文档中心

Hologres:Praktik terbaik untuk pengembangan dengan Hologres

更新时间:Mar 13, 2026

Topik ini menjelaskan standar pengembangan untuk Hologres. Ikuti standar ini untuk memahami persyaratan pengembangan dan mencegah kesalahan operasional.

Standar domain data

  • Lapisan gudang data

    Gudang data umumnya dibangun secara berlapis. Lapisan utama tercantum di bawah ini. Lapisan model data umum (CDM) mencakup lapisan data warehouse detail (DWD), data warehouse service (DWS), dan dimensi (DIM). Di Hologres, Anda dapat menggunakan skema untuk mengisolasi lapisan yang berbeda.

    • Operation data store (ODS): Lapisan data operasional.

    • Common data model (CDM): Lapisan model dimensi publik.

      • Data warehouse detail (DWD): Lapisan data rinci.

      • DWS (Data Warehouse Summary): Ringkasan gudang data.

      • Dimension (DIM): Lapisan data dimensi.

    • Application data service (ADS): Lapisan data aplikasi.

    Anda dapat memilih tingkat granularitas yang sesuai berdasarkan kompleksitas bisnis Anda. Misalnya, jika perusahaan Anda memiliki beberapa unit bisnis (BU), gunakan singkatan BU sebagai awalan skema.

    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

    Tentukan kode bersama untuk domain data yang berbeda guna menetapkan standar perusahaan. Tabel berikut memberikan beberapa contoh.

    Nama domain data

    Singkatan Domain Data: Contoh

    Domain transaksi

    trd

    Item domain

    itm

    Domain log

    log

    Domain anggota dan toko

    mbr

    Domain manajemen pasokan, penjualan, dan inventaris

    dst

    Domain penjualan dan layanan pelanggan

    crm

    Domain kredit dan pengendalian risiko

    rsk

    Domain alat dan layanan

    tls

    Domain logistik dan pengiriman ekspres

    lgt

Konvensi penamaan

  • Konvensi penamaan pekerjaan

    Aturan penamaan berbeda untuk tugas internal dan tugas sinkronisasi, sebagai berikut.

    • Tugas SQL internal (bukan tugas sinkronisasi): holo_{target_table_name}. Format ini membedakannya dari tugas tabel eksternal.

    • Impor data ke Hologres: {source}2holo_{target_table_name}.

    • Ekspor data dari Hologres: holo2{target}_{target_table_name}.

  • Konvensi penamaan tabel

    Nama lapisan

    Aturan penamaan tabel di lapisan ini

    Contoh

    DWD

    ${bu}_dwd.data_domain_business_process_[custom_root]_suffix

    taobao_dwd.trd_ord_flow

    DWS

    ${bu}_dws.data_domain_data_granularity_abbreviation_business_process_[{custom_root}]_statistical_period

    taobao_dws.trd_all_dtr, taobao_dws.log_slr_pv_dtr

    DIM

    ${bu}_dim.{dimension_definition}[_{custom_root}]

    taobao_cdm.dim_itm

    ADS

    ${bu}_ads.business_domain_dimension_[{custom_root}]_{refresh_period_identifier}

    Catatan

    Identifikasi periode refresh adalah sebagai berikut.

    • d: Direfresh setiap hari.

    • r: Direfresh secara real time.

    • h: Direfresh hampir secara real time.

    taobao_ads.trd_cate_d

  • Konvensi penamaan Table Group

    Jika bisnis Anda memerlukan beberapa Table Group, beri nama dengan format berikut: ${bu}_{data_warehouse_layer_name}_{business_definition}_tg.

  • Lihat konvensi penamaan

    Bagian berikut menjelaskan aturan penamaan dan memberikan contoh untuk view persisten.

    • Aturan

      • DWS: ${bu}_dws.data_domain_data_granularity_abbreviation_business_process_[{custom_root}]_statistical_period_v.

      • ADS: ${bu}_ads.business_domain_dimension_[{custom_root}]_{refresh_period_identifier}_v.

    • Contoh

      taobao_dws.trd_byr_itm_ord_cm_v
  • Konvensi penamaan tabel eksternal

    Tambahkan akhiran ext ke nama tabel MaxCompute asli. Kode berikut memberikan contohnya.

    taobao_dim.camp_ext
  • Konvensi penamaan tabel sementara

    Tambahkan awalan tmp dan akhiran numerik ke nama tabel asli. Kode berikut memberikan contohnya.

    taobao_dim.tmp_camp_01
  • Singkatan umum

    Periode statistik

    Singkatan

    Hari terakhir

    1d

    Hari-hari terakhir

    nd

    Kumulatif

    td

    Minggu kalender

    cw

    Bulan kalender

    cm

    Kumulatif hingga saat ini

    dtr

    Kumulatif hingga jam saat ini

    dhr

Standar pengembangan tabel

  • Standar tabel internal

    Sebelum membuat tabel, tentukan nama tabel dan bidangnya sesuai dengan standar model data. Anda juga harus mengonfirmasi siklus hidup tabel berdasarkan kebutuhan dan menambahkan komentar lengkap untuk tabel dan bidangnya. Standar terkait adalah sebagai berikut.

    • Standar ketat (publikasi tidak diperbolehkan jika standar ini tidak dipenuhi):

      • Tabel output dan bidangnya harus menyertakan komentar. Aturan ini berlaku untuk semua skenario pengembangan data di platform. Komentar tabel harus ringkas dan jelas.

      • Pernyataan pembuatan tabel harus menentukan siklus hidup tabel (time_to_live_in_seconds).

      • Pernyataan pembuatan tabel harus menentukan kunci distribusi (distribute_key). Prinsip pemilihan kunci distribusi adalah sebagai berikut.

        Pilih bidang yang cukup terdistribusi dan paling sering digunakan dalam operasi JOIN atau GROUP BY. Misalnya, untuk tabel pembeli-item, Anda dapat menetapkan user_id dan item_id sebagai kunci distribusi. Namun, jika user_id adalah kunci yang paling sering digunakan untuk join, tetapkan kunci distribusi hanya ke user_id, bukan ke keduanya user_id dan item_id.

      • Tabel yang di-join dalam kueri harus dibuat dalam Table Group yang sama.

      • Gunakan nama dan tipe data yang sama untuk ID entitas yang sama di seluruh tabel fakta dan tabel dimensi. Misalnya, jika ID pengguna di tabel transaksi adalah user_id, maka di tabel dimensi juga harus user_id, bukan uid. Pertahankan konsistensi tipe data untuk mengurangi konversi tipe data.

      • Secara default, gunakan ds sebagai bidang partisi untuk semua tabel fisik.

    • Standar yang direkomendasikan:

      • Pernyataan pembuatan tabel harus menentukan setidaknya salah satu properti berikut: bitmap_columns, segment_key, atau cluster_key.

      • Jika kardinalitas suatu bidang tidak jelas, jangan tetapkan properti tabel dictionary_encoding_columns (indeks kamus). Anda dapat menjalankan pernyataan berikut untuk mengosongkan properti tersebut.

        call set_table_property('table_name', 'dictionary_encoding_columns','')
      • Untuk properti tabel orientation (format penyimpanan data), format column direkomendasikan. Anda juga dapat menetapkan properti ini ke row.

        Catatan

        Jangan gunakan format row kecuali Anda dapat memastikan bahwa semua kueri pada tabel selalu menentukan semua kolom primary key menggunakan operator equals atau in. Jika properti ini tidak ditetapkan, format penyimpanan column digunakan secara default.

      • Properti tabel bitmap_columns (encoding bit) memungkinkan bitmap untuk memfilter data dengan cepat dalam file penyimpanan.

        • Tetapkan bitmap_columns ke bidang yang digunakan dalam kondisi filter. Secara default, semua bidang TEXT disertakan.

        • Jangan tetapkan bidang dengan kardinalitas tinggi, seperti user_id, sebagai bitmap_columns. Kami merekomendasikan agar Anda menetapkan metrik seperti ID aktivitas sebagai bitmap_columns.

      • Properti tabel event_time_column harus digunakan untuk bidang yang terkait dengan penulisan real-time, seperti timestamp event.

      • Properti tabel clustering_key (indeks kluster) mengurutkan data berdasarkan indeks kluster yang ditentukan. Membuat indeks kluster dapat mempercepat kueri range dan filter pada kolom indeks. Anda hanya dapat menetapkan satu indeks kluster. Properti ini cocok untuk filtering rentang, seperti saat Anda melakukan bucket GMV.

  • Standar tabel eksternal MaxCompute

    Hologres mendukung kueri terakselerasi pada MaxCompute melalui tabel eksternal, yang dapat menyederhanakan proses sinkronisasi data. Untuk meningkatkan kinerja komputasi, jangan gabungkan tabel internal dengan tabel eksternal kecuali benar-benar diperlukan. Untuk mengelola dan memelihara tabel eksternal dengan lebih baik, ikuti standar berikut.

    • Standar ketat: Anda harus mengikuti konvensi penamaan tabel eksternal dengan menambahkan akhiran ext ke nama tabel MaxCompute asli.

    • Standar yang direkomendasikan:

      • Pertahankan DDL skema tabel dan tempatkan di bawah kontrol versi.

      • Jangan gabungkan tabel internal dengan tabel eksternal. Sebagai gantinya, sinkronkan data dari tabel eksternal ke tabel internal.

  • Lihat Standar

    • Standar ketat: Anda harus mengikuti konvensi penamaan view secara ketat.

    • Standar yang direkomendasikan:

      • Aktifkan penjadwalan tugas untuk memastikan integritas rantai dependensi tugas pengembangan selanjutnya.

      • Buat view terpisah untuk granularitas yang berbeda guna menghindari komputasi berlebihan untuk permintaan kompleks.

        Misalnya, Anda dapat membuat empat view terpisah untuk cw, cm, nd, dan 1d. Jika Anda memiliki klien yang berbeda, Anda dapat membuat view untuk pc, wap, dan app. Jika Anda menggunakan metode pengumpulan yang berbeda, Anda dapat memisahkannya menjadi ut dan non-ut.

  • Standar siklus hidup (hanya untuk tabel internal)

    Lapisan gudang data

    Deskripsi aturan siklus hidup yang sesuai

    DWD

    Untuk detail inkremental harian, periode retensi yang direkomendasikan tidak lebih dari 2 tahun.

    DWS

    Untuk detail inkremental harian, periode retensi yang direkomendasikan tidak lebih dari 2 tahun.

    DIM

    Untuk tabel dimensi besar, retensi permanen direkomendasikan setelah pemodelan penyimpanan ekstrem. Untuk tabel dimensi kecil, pertahankan siklus hidup konsisten dengan tabel MaxCompute.

    Standar untuk membedakan antara tabel dimensi besar dan kecil: satu partisi tunggal tidak boleh melebihi 1 TB.

    Standar yang direkomendasikan:

    Untuk tabel partisi, tulis data tugas real-time ke partisi hari ini. Tetapkan TTL yang sesuai berdasarkan lapisan gudang data. Jangan tulis data historis yang telah diperbarui ke partisi yang sudah melebihi TTL-nya.

  • Standar Table Group (opsional)

    Setiap database memiliki Table Group default dan jumlah shard. Anda dapat membuat Table Group baru atau mengubah jumlah shard berdasarkan kebutuhan bisnis untuk mencapai kinerja yang lebih baik. Standar yang direkomendasikan adalah sebagai berikut.

    • Jangan membuat Table Group baru kecuali benar-benar diperlukan.

    • Untuk tabel dengan volume data besar, Anda dapat membuat Table Group terpisah dengan jumlah shard yang lebih besar.

    • Untuk banyak tabel dengan volume data kecil, Anda dapat membuat Table Group dengan jumlah shard yang lebih kecil.

    • Tabel yang perlu di-join dalam kueri harus ditempatkan dalam Table Group yang sama.

Standar Pengembangan Ladang

  • Standar jenis bidang

    Anda harus membuat tipe bidang secara ketat sesuai dengan persyaratan berikut.

    Bidang/Akhiran bidang

    Komentar bidang

    Contoh

    Singkatan

    user_id

    ID anggota auto-increment

    user_id=232442843

    int8

    item_id

    ID item

    item_id=63283278784383

    int8

    member_id

    ID anggota terdaftar

    member_id=b2b-dsajk2343821b

    TEXT

    *amt*

    Tipe jumlah

    pay_ord_amt_1d_001=923.23

    NUMERIC

    *fee*

    Tipe biaya

    post_fee=923.23

    NUMERIC

    *cnt*

    Tipe jumlah

    pay_ord_byr_cnt_1d_001=923

    int4/int8

    is_*

    Tipe Boolean

    is_pm=Y/is_pm=true

    TEXT/BOOL

    ds

    Partisi

    ds=20210120

    YYYYMMDD

  • Referensi tipe data dasar

    Tipe data Hologres kompatibel dengan tipe data PostgreSQL, tetapi Hologres hanya mendukung subset-nya. Untuk informasi lebih lanjut tentang tipe bidang dan pemetaannya dengan MaxCompute, lihat Ringkasan tipe data.

  • Unit mata uang dan presisi

    Satuan mata uang adalah USD. Kecuali ditentukan lain dalam model, jangan membulatkan data apa pun yang terkait jumlah. Praktik ini mencegah ketidakkonsistenan dalam perhitungan ringkasan yang menggunakan metode statistik berbeda.

Standar SQL

  • Standar ketat:

    • Di lapisan terluar pernyataan SQL dan dalam subkueri, jangan gunakan select * untuk bidang yang tidak memerlukan perhitungan. Semua operasi harus secara eksplisit menentukan nama kolom.

    • Dalam klausa WHERE, Anda harus menangani bidang null dan string kosong menggunakan fungsi Coalesce.

  • Standar yang direkomendasikan:

    • Sering gunakan bidang count distinct sebagai distribution_key. Untuk kombinasi beberapa operasi count distinct, Anda harus menulis ulang pernyataan secara manual.

      select count(distinct userid)
           , count(distinct case when stat_date = '20201111' then userid end) 
      from t group by cate_id;
      
      --Rewrite as follows
      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;
    • Untuk tugas penjadwalan offline, lakukan operasi analyze table pada tabel partisi.

    • Untuk skenario penggunaan jangka panjang, gunakan operasi ATTACH/DETACH untuk operasi batch pada partisi historis guna menghindari fluktuasi drastis pada metrik data.