Penyimpanan tiered MaxCompute mendukung kelas penyimpanan Standard, IA storage class, dan penyimpanan jangka panjang. Secara default, tabel menggunakan penyimpanan Standard. Anda dapat mengatur kelas penyimpanan untuk tabel atau partisi tertentu ke IA storage class atau penyimpanan jangka panjang berdasarkan frekuensi akses data, sehingga memungkinkan tiering otomatis antara data panas dan dingin guna mengurangi biaya penyimpanan.
Kelas penyimpanan tiered
|
Storage class |
Description |
|
Standard |
Kelas penyimpanan default. Gunakan untuk data yang sering diakses dan memerlukan operasi baca/tulis yang sering. |
|
IA storage class |
Gunakan untuk data yang tidak memerlukan akses sering. Ini secara efektif mengurangi biaya penyimpanan. Catatan
|
|
Long-term storage |
Penagihan penyimpanan tiered
-
Untuk detail penagihan penyimpanan, lihat Storage fee.
-
Saat Anda mengatur tabel atau partisi ke IA storage class atau penyimpanan jangka panjang, pantau volume dan frekuensi akses data Anda. Jika Anda mengakses volume data yang besar atau terlalu sering, biaya Anda mungkin melebihi biaya penyimpanan Standard.
-
Mengakses seluruh tabel atau partisi yang disimpan dalam IA storage class sekali per bulan menimbulkan biaya yang setara dengan penyimpanan Standard.
-
Mengakses seluruh tabel atau partisi yang disimpan dalam penyimpanan jangka panjang sekali setiap enam bulan menimbulkan biaya yang setara dengan penyimpanan Standard.
-
-
Masuk ke Expenses and Costs. Pada halaman , Anda dapat melihat biaya untuk berbagai kelas penyimpanan. Item penagihan untuk Standard, IA storage class, dan penyimpanan jangka panjang masing-masing bernama Storage, Tiered Storage - IA, dan Long-term Storage. Untuk informasi lebih lanjut, lihat View bill details.
Lingkup
-
Batasan wilayah: China (Hangzhou), China (Shanghai), China (Beijing), China (Zhangjiakou), China (Ulanqab), China (Shenzhen), China (Chengdu), China (Hong Kong), China (Shanghai) Finance Cloud, China (Beijing) Finance Cloud, China (Shenzhen) Finance Cloud, Singapura, Malaysia (Kuala Lumpur), Indonesia (Jakarta), Jepang (Tokyo), Jerman (Frankfurt), AS (Silicon Valley).
-
Data yang disimpan dalam IA storage class atau penyimpanan jangka panjang tidak dapat diakses langsung oleh Hologres. Saat Hologres membaca data MaxCompute secara langsung, tabel atau partisi MaxCompute tidak memperbarui last_access_time-nya. Oleh karena itu, jika Anda mengonfigurasi aturan siklus hidup menggunakan kondisi
last_access_time, tabel atau partisi yang hanya dibaca terus-menerus oleh Hologres mungkin tetap sesuai dengan aturan tersebut.
Atur kelas penyimpanan
Anda dapat mengonversi antar kelas penyimpanan. Mengubah kelas penyimpanan tidak memengaruhi akses data.
Tabel berikut menjelaskan konversi kelas penyimpanan:
|
Conversion |
Description |
|
Standard → IA storage class |
Mendukung konversi manual dan otomatis. Tidak dikenakan biaya akses I/O. LastModifiedTime dan LastAccessTime tabel atau partisi tidak diperbarui. |
|
Standard → Long-term storage |
|
|
Infrequent Access > Long-term Storage |
Mendukung konversi manual dan otomatis. Alih bencana manual dikenakan biaya akses I/O. Alih bencana otomatis tidak dikenakan biaya. LastModifiedTime dan LastAccessTime tabel atau partisi tidak diperbarui. |
|
IA storage class → Standard |
Hanya mendukung konversi manual. Dikenakan biaya akses I/O. LastModifiedTime dan LastAccessTime tabel atau partisi diperbarui. |
|
Long-term storage → IA storage class |
|
|
Long-term storage → Standard |
Pengaturan kustom manual
Untuk tabel non-partisi atau partisi, atur secara manual kelas penyimpanan ke IA storage class atau penyimpanan jangka panjang. Perubahan berlaku segera.
Sintaks
ALTER TABLE <TABLE_NAME> [PARTITION(<PARTITION_SPEC>)]
SET <TBLPROPERTIES|PARTITIONPROPERTIES>("storagetier"="standard|lowfrequency|longterm");
Deskripsi parameter
-
TABLE_NAME: Wajib. Nama tabel yang kelas penyimpanannya ingin Anda ubah.
-
PARTITION_SPEC: Wajib saat mengubah kelas penyimpanan partisi.
-
TBLPROPERTIES | PARTITIONPROPERTIES: Ubah kelas penyimpanan tabel atau partisi. Deskripsi nilai:
-
TBLPROPERTIES: Mengubah kelas penyimpanan tabel.
-
PARTITIONPROPERTIES: Mengubah kelas penyimpanan partisi.
-
-
storagetier: Wajib. Kelas penyimpanan tiered. Nilai yang valid:
-
Standar: Jenis Penyimpanan Standar. Hanya dikenakan biaya penyimpanan.
-
lowfrequency: IA storage class. Dikenakan biaya penyimpanan dan biaya akses data IA storage class.
-
longterm: Penyimpanan jangka panjang. Dikenakan biaya penyimpanan dan biaya akses data penyimpanan jangka panjang.
-
Anda hanya dapat mengatur penyimpanan tiered untuk partisi dalam tabel partisi. Anda tidak dapat mengatur penyimpanan tiered untuk seluruh tabel partisi.
Contoh
-
Contoh 1: Atur kelas penyimpanan tabel non-partisi ke IA storage class.
ALTER TABLE tablename SET TBLPROPERTIES("storagetier"="lowfrequency");Untuk memverifikasi kelas penyimpanan saat ini, periksa bidang
StorageTierdalam properti tabel.-- View table properties DESC extended tablename; --- Sample output +-------------------------------------------------------------------+ | Owner: ALIYUN$mofan_****@test.aliyunid.com | | Project: mf_mc_**** | | TableComment: | +-------------------------------------------------------------------+ | CreateTime: 2021-11-18 15:14:00 | | LastDDLTime: 2023-09-11 14:34:55 | | LastModifiedTime: 2023-09-13 15:02:28 | | LastAccessTime: 2023-09-14 10:50:57 | +-------------------------------------------------------------------+ | InternalTable: YES | Size: 1923683131 | +-------------------------------------------------------------------+ | Native Columns: | +-------------------------------------------------------------------+ | Field| Type| Label |ExtendedLabel| Nullable| DefaultValue|Comment | +-------------------------------------------------------------------+ | empno | bigint | | | true | NULL | | | ename | string | | | true | NULL | | | job | string | | | true | NULL | | | mgr | bigint | | | true | NULL | | | hiredate | datetime | | | true | NULL | | | sal | bigint | | | true | NULL | | | comm | bigint | | | true | NULL | | | deptno | bigint | | | true | NULL | | +-------------------------------------------------------------------+ | Extended Info: | +-------------------------------------------------------------------+ | TableID: 8e0cc78c81ab4ad7af30bff7a8e**** | | IsArchived: false | | PhysicalSize: 5771049393 | | FileNum: 3 | | StoredAs: AliOrc | | CompressionStrategy: normal | | odps.timemachine.retention.days: 1 | | ColdStorageStatus: N/A | | encryption_enable: false | | StorageTier: lowfrequency | | StorageTierLastModifiedTime: 2023-09-11 14:34:55 | +-------------------------------------------------------------------+ -
Contoh 2: Atur kelas penyimpanan partisi dalam tabel partisi bank_data_pt ke IA storage class.
ALTER TABLE bank_data_pt PARTITION (credit='yes') SET PARTITIONPROPERTIES ("storagetier" = 'lowfrequency');Untuk memverifikasi kelas penyimpanan saat ini, periksa bidang
StorageTierdalam properti partisi.-- View partition properties DESC extended bank_data_pt PARTITION(credit='yes'); -- Sample output +------------------------------------------------------------------------------------+ | PartitionSize: 0 | +------------------------------------------------------------------------------------+ | CreateTime: 2024-05-10 10:28:16 | | LastDDLTime: 2024-05-10 10:31:01 | | LastModifiedTime: 2024-05-10 10:28:16 | +------------------------------------------------------------------------------------+ | IsExstore: false | | IsArchived: false | | PhysicalSize: 0 | | FileNum: 0 | | ColdStorageStatus: N/A | | StorageTier: LowFrequency | | StorageTierLastModifiedTime: 2024-05-10 10:31:01 | +------------------------------------------------------------------------------------+
Konfigurasi otomatis menggunakan aturan siklus hidup
Anda dapat mengonfigurasi aturan siklus hidup penyimpanan tiered di tingkat proyek atau tabel partisi. Aturan ini secara otomatis mengonversi kelas penyimpanan berdasarkan kondisi yang ditentukan:
-
Aturan tingkat proyek:
Setelah Anda menetapkan aturan tingkat proyek, aturan tersebut menjadi aturan default untuk semua tabel non-partisi dalam proyek dan semua partisi dalam tabel partisi yang tidak memiliki aturannya sendiri. Tabel dan partisi tersebut secara otomatis dikonversi ke kelas penyimpanan yang ditentukan.
-
Pengaturan di tingkat tabel partisi:
Setelah Anda menetapkan aturan untuk tabel partisi tertentu, aturan tersebut menggantikan aturan tingkat proyek. Semua partisi dalam tabel yang memenuhi kondisi aturan secara otomatis dikonversi ke kelas penyimpanan yang ditentukan.
Batasan penting
Anda tidak dapat mengonfigurasi aturan pada granularitas yang lebih rinci:
-
Anda tidak dapat menetapkan aturan independen untuk satu tabel non-partisi (mewarisi aturan proyek).
-
Anda tidak dapat menetapkan aturan independen untuk partisi tertentu dalam tabel partisi (mewarisi aturan tabel).
Eksekusi aturan
-
Saat siklus hidup tabel atau partisi memenuhi aturan penyimpanan jangka panjang (longterm) dan aturan penyimpanan frekuensi rendah (lowfrequency), tabel atau partisi tersebut diprioritaskan dikonversi ke
longterm. -
Jika tabel atau partisi pertama kali memenuhi aturan
lowfrequency, tabel atau partisi tersebut dikonversi kelowfrequency. Jika kemudian memenuhi aturanlongterm, tabel atau partisi tersebut dikonversi lagi kelongterm. Konversi darilowfrequencykelongtermtidak dikenakan biaya akseslowfrequency. Untuk detail penagihan, lihat Tiered storage billing. -
Platform memindai aturan dua kali sehari. Oleh karena itu, mungkin terjadi penundaan antara saat tabel atau partisi memenuhi kondisi dan saat kelas penyimpanan diperbarui.
Sintaks
-
Tetapkan aturan siklus hidup di tingkat proyek
SETPROJECT odps.table.lifecycle.config=<lifecycle_config_json_string>;Anda juga dapat mengonfigurasi ini di konsol MaxCompute:
-
Masuk ke MaxCompute console dan pilih wilayah di pojok kiri atas.
-
Di panel navigasi kiri, pilih .
-
Pada halaman Projects, klik Manage di kolom Actions untuk proyek target.
-
Pada halaman Project Settings, klik tab Parameter Configuration.
-
Di bagian Lifecycle Configuration, klik Edit.
-
Konfigurasikan parameter Last Access Configuration Policy dan Last Modified Configuration Policy.
-
Last Access Configuration Policy: Sesuai dengan parameter
DaysAfterLastAccessGreaterThan. -
Last Modified Configuration Policy: Sesuai dengan parameter
DaysAfterLastModificationGreaterThan.
-
-
-
Tetapkan aturan siklus hidup untuk tabel partisi
-
Tetapkan saat pembuatan tabel:
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] <table_name> [PRIMARY KEY (<pk_col_name>, <pk_col_name2>),(<col_name> <data_type> [NOT NULL] [DEFAULT <default_value>] [comment <col_comment>], ...)] PARTITIONED BY (<col_name> <data_type> [comment <col_comment>], ...) tblproperties ('lifecycle_config' = '<lifecycle_config_json_string>') ; -
Pengaturan modifikasi tabel partisi:
ALTER TABLE <TABLE_NAME> SET TBLPROPERTIES ('lifecycle_config' = '<lifecycle_config_json_string>');
-
-
Lihat konfigurasi siklus hidup penyimpanan tiered tabel partisi
SHOW CREATE TABLE <table_name>;
Deskripsi parameter
Berikut ini menjelaskan parameter utama. Untuk parameter lainnya, lihat General parameters.
lifecycle_config_json_string:
-
Untuk aturan siklus hidup tingkat proyek, definisikan sebagai berikut:
{ "TierToLowFrequency": { "DaysAfterLastModificationGreaterThan": <days>, // Days since last modification "DaysAfterLastAccessGreaterThan": <days>, // Days since last access }, "TierToLongterm": { "DaysAfterLastModificationGreaterThan": <days>, "DaysAfterLastAccessGreaterThan": <days> } // Each condition is optional. Multiple conditions use OR logic. } -
Untuk aturan siklus hidup tabel partisi, definisikan sebagai berikut:
{ \"TierToLowFrequency\": { \"DaysAfterLastModificationGreaterThan\": <days>, // Days since last modification \"DaysAfterLastAccessGreaterThan\": <days>, // Days since last access }, \"TierToLongterm\": { \"DaysAfterLastModificationGreaterThan\": <days>, \"DaysAfterLastAccessGreaterThan\": <days> } // Each condition is optional. Multiple conditions use OR logic. } -
TierToLowFrequency: Pengenal untuk IA storage class.
-
TierToLongterm: Pengenal untuk penyimpanan jangka panjang.
-
DaysAfterLastModificationGreaterThan: Menentukan jumlah hari setelah pengaturan diterapkan secara otomatis, berdasarkan LastModifiedTime tabel atau partisi.
-
DaysAfterLastAccessGreaterThan: Menentukan jumlah hari setelah kelas penyimpanan diatur secara otomatis berdasarkan LastAccessTime tabel atau partisi. Jika LastAccessTime kosong:
-
Untuk tabel atau partisi yang dibuat sebelum 1 Oktober 2023, sistem menggunakan waktu UTC+0
2023-10-01 00:00:00sebagai default. -
Untuk tabel atau partisi yang dibuat pada atau setelah 1 Oktober 2023, jika data belum pernah diakses, sistem menggunakan CreateTime.
-
Contoh
-
Contoh 1: Tetapkan aturan siklus hidup di tingkat proyek.
setproject odps.table.lifecycle.config={"TierToLongterm":{"DaysAfterLastAccessGreaterThan":180},"TierToLowFrequency":{"DaysAfterLastAccessGreaterThan":120}}; -
Contoh 2: Hapus konfigurasi siklus hidup tingkat proyek.
setproject odps.table.lifecycle.config=; -
Contoh 3: Tetapkan aturan siklus hidup untuk tabel partisi.
-- Set during table creation CREATE TABLE lifecycle_part_t (key string) PARTITIONED BY (ds STRING) tblproperties ('lifecycle_config' = '{\"TierToLowFrequency\": {\"DaysAfterLastModificationGreaterThan\": 2,\"DaysAfterLastAccessGreaterThan\": 2},\"TierToLongterm\": {\"DaysAfterLastModificationGreaterThan\": 4,\"DaysAfterLastAccessGreaterThan\": 7}}') ; -- Modify an existing table ALTER TABLE lifecycle_part_t SET tblproperties ('lifecycle_config'='{\"TierToLowFrequency\": {\"DaysAfterLastModificationGreaterThan\": 90,\"DaysAfterLastAccessGreaterThan\": 30},\"TierToLongterm\": {\"DaysAfterLastModificationGreaterThan\": 180,\"DaysAfterLastAccessGreaterThan\": 7}}'); -
Contoh 4: Hapus konfigurasi siklus hidup penyimpanan tiered dari tabel partisi.
ALTER TABLE lifecycle_part_t SET tblproperties ('lifecycle_config'='{}');
Atur izin akses data untuk penyimpanan tiered
Mengakses data yang disimpan dalam IA storage class atau penyimpanan jangka panjang dikenakan biaya akses. Anda dapat mengontrol akses ke data ini dengan menggabungkan row-level access control dengan fungsi GET_PARTITION_META.
GET_PARTITION_META
GET_PARTITION_META adalah fungsi khusus. Anda hanya dapat menggunakannya dengan izin tingkat baris. Jangan gunakan dalam kueri SQL biasa.
Sintaks
struct GET_PARTITION_META(<tableName>, <pt_col1>, <pt_col2>, ..., <pt_col_n>);
Deskripsi parameter
|
Parameter Name |
Description |
|
tableName |
Nama tabel partisi. Harus berupa String. Mendukung format |
|
pt_col |
Setiap parameter dari pt_col1 hingga pt_col_n sesuai dengan level partisi dalam tabel partisi. Setiap parameter harus berupa referensi kolom. |
Nilai kembalian
Mengembalikan Struct bertipe struct<storagetier:string>. Struct berisi satu bidang String yang menjelaskan kelas penyimpanan partisi yang sesuai.
Catatan
-
Saat menambahkan aturan tingkat baris ke tabel, pertimbangkan pola akses pengguna selain yang dikontrol. Jika pengguna lain telah mengakses tabel, tetapkan aturan eksplisit untuk mereka guna menghindari penyaringan data yang tidak diinginkan akibat pembatasan akses yang tidak disengaja. Untuk informasi lebih lanjut, lihat Row-level access control.
-
Secara default, tabel MaxCompute dapat diakses melalui SQL dan mesin eksternal (seperti Spark dan Flink). Namun, hanya mesin SQL MaxCompute yang mendukung fungsi GET_PARTITION_META. Jika Anda menggunakan GET_PARTITION_META dalam kontrol akses tingkat baris, tabel hanya dapat dibaca oleh mesin SQL MaxCompute. Mesin lain tidak dapat mengakses tabel tersebut.
-
Untuk mengakses data di bawah izin tingkat baris, Anda juga harus memiliki izin SELECT pada data tersebut.
-
Perilaku pemangkasan partisi bervariasi tergantung pada kondisi filter yang digunakan dengan GET_PARTITION_META.
-
Jika kondisi filter hanya melibatkan bidang partisi—misalnya, mengizinkan akses ke penyimpanan Standard di mana nilai partisi tingkat pertama adalah
2024:GET_PARTITION_META('storage_table', pt1, pt2).storagetier == 'standard') AND pt1='2024'Saat Anda mengakses
storage_tablemenggunakan SQL dan klausa WHERE tidak mengandung kondisi partisi, sistem secara native mendukung pemangkasan partisi untuk menghindari pemindaian tabel penuh dan hanya mengizinkan akses read-only ke partisi dalamstorage_tableyang memenuhi persyaratan. -
Jika kondisi filter mencakup bidang non-partisi yang dikombinasikan dengan operator AND—misalnya, mengizinkan akses ke penyimpanan Standard di mana
a>100:GET_PARTITION_META('storage_table', pt1, pt2).storagetier == 'standard') AND a > 100Saat Anda mengkueri
storage_tabletanpa kondisi partisi dalam klausa WHERE, pemangkasan partisi tetap berlaku. Hanya partisi yang disimpan sebagaistandardyang diakses. -
Jika kondisi filter mencakup bidang non-partisi yang dikombinasikan dengan operator OR—misalnya, mengizinkan akses ke penyimpanan Standard atau di mana
a>100:get_partition_meta('storage_table', pt1, pt2).storagetier == 'standard') OR a > 100Saat Anda mengkueri
storage_table, dua skenario berlaku:-
Jika klausa WHERE tidak memiliki kondisi partisi, semua partisi dipindai untuk menemukan data di mana
a>100. -
Jika klausa WHERE mencakup kondisi partisi, hanya partisi yang ditentukan yang dipindai untuk data yang sesuai dengan
standardataua>100.
-
-
Contoh
Buat tabel partisi storage_table.
CREATE TABLE storage_table(a BIGINT, b BIGINT) PARTITIONED BY (pt1 STRING, pt2 STRING);
-
Contoh 1:
Buat kebijakan bernama
policy01untuk kelompok pengguna DEFAULT. Kebijakan ini hanya mengizinkan akses ke data penyimpanan Standard dalamstorage_table. Semua pengguna (termasuk Pemilik Proyek) ditolak akses ke data IA storage class atau penyimpanan jangka panjang dan menerima hasil kosong.CREATE ROW ACCESS POLICY policy01 ON storage_table TO DEFAULT FILTER USING (get_partition_meta('storage_table', pt1, pt2).storagetier == 'standard');Jika Ringkasan Logview menampilkan kata kunci berikut, penyaringan tingkat baris dipicu:
WARNING:[1,15] row access policy is enabled on table yyy_hp_storagetier.storage_table01. Ini menunjukkan bahwa kebijakan akses baris diterapkan selama kueri. -
Contoh 2:
Berikan pengguna
user_xizinpolicy02untuk mengakses data IA storage class dan penyimpanan jangka panjang dalamstorage_table.CREATE ROW ACCESS POLICY policy02 ON storage_table TO USER (user_x) -- You can also grant to a role using TO role rolename, then assign the role to user_x. FILTER USING (get_partition_meta('storage_table', pt1, pt2).storagetier IN ('lowfrequency','longterm'));Dua skenario berlaku:
-
Jika tabel telah dikonfigurasi dengan izin
policy01, semua pengguna (kecualiuser_x) dapat mengakses data penyimpanan standardstorage_table, tetapi tidak dapat mengakses data akses jarang atau penyimpanan jangka panjang, dan upaya apa pun untuk melakukannya mengembalikan nilai kosong. Untukuser_x, akses ke data akses jarang dan penyimpanan jangka panjangstorage_tablediizinkan, tetapi akses ke data penyimpanan standard tidak diizinkan dan mengembalikan nilai kosong. -
Jika
policy01tidak ditetapkan, semua pengguna (kecuali user_x) tidak dapat mengakses data apa pun dalamstorage_table(hasil kosong). Hanya user_x yang dapat mengakses data IA storage class dan penyimpanan jangka panjang tetapi tidak dapat mengakses data penyimpanan Standard (hasil kosong).
-
-
Contoh 3:
Berikan pengguna
user_yizinpolicy03untuk mengakses semua data dalamstorage_table.CREATE ROW ACCESS POLICY policy03 ON storage_table TO USER (user_y) -- You can also grant to a role using TO role rolename, then assign the role to user_y. FILTER USING (true); -- Constant true allows access to all data in the table.Dua skenario berlaku:
-
Jika tabel telah ditetapkan dengan izin
policy01, semua pengguna (kecualiuser_y) dapat mengakses data penyimpanan Standardstorage_table, tetapi tidak dapat mengakses akses jarang atau penyimpanan jangka panjang, dan permintaan tersebut mengembalikan nilai kosong. Penggunauser_ydapat mengakses data semua kelas penyimpanan dalamstorage_table. -
Jika tabel belum diberi izin
policy01, semua pengguna (kecualiuser_y) tidak dapat mengakses data apa pun yang disimpan dalamstorage_table, dan permintaan tersebut mengembalikan nilai kosong. Hanyauser_yyang dapat mengakses data semua kelas penyimpanan dalamstorage_table.
-