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]_Suffixtaobao_dwd.trd_ord_flowDWS
${bu}_dws.Data domain_Abbreviated statistic granularity_Business process_[{Custom root}]_Statistical periodtaobao_dws.trd_all_dtr, taobao_dws.log_slr_pv_dtrDIM
${bu}_dim.{Dimension}[_{Custom root}]taobao_cdm.dim_itmADS
${bu}_ads.Business domain_Dimension_[{Custom root}]_{Update frequency}CatatanNilai valid untuk variabel Frekuensi Pembaruan:
d: pembaruan harian
r: pembaruan real-time
h: pembaruan quasi-real-time
taobao_ads.trd_cate_dGrup 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_vADS:
${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
extsebagai nama tabel asing. Contoh:taobao_dim.camp_extTabel Sementara
Gunakan nama tabel asli dengan awalan
tmpdan akhiran nomor urut sebagai nama tabel sementara. Contoh:taobao_dim.tmp_camp_01Singkatan
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
dsuntuk 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_columnsjika 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.
CatatanJangan 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
extsebagai 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=232442843int8item_id
Bidang tentang produk.
item_id=63283278784383int8member_id
Bidang ID anggota.
member_id=b2b-dsajk2343821bTEXT
*amt*
Bidang tentang jumlah.
pay_ord_amt_1d_001=923.23NUMERIC
*fee*
Bidang tentang biaya.
post_fee=923.23NUMERIC
*cnt*
Bidang tentang kuantitas.
pay_ord_byr_cnt_1d_001=923int4/int8is_*
Bidang Boolean.
is_pm=Y/is_pm=trueTEXT/BOOL
ds
Bidang partisi.
ds=20210120YYYYMMDD
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.