MaxCompute mendukung tiga tier penyimpanan: Standard, Infrequent Access (IA), dan Archive. Secara default, data disimpan di tier Standard. Berdasarkan frekuensi akses data, Anda dapat mengatur tier penyimpanan tabel atau partisi tertentu ke IA atau Archive untuk menerapkan penyimpanan berjenjang bagi data panas dan dingin serta mengurangi biaya penyimpanan.
Tier penyimpanan
Tier penyimpanan | Deskripsi |
Standard | Tier penyimpanan default. Tier ini cocok untuk skenario di mana data sering diakses dan memerlukan operasi baca-tulis yang sering. |
IA | Cocok untuk data yang tidak sering diakses. Hal ini dapat secara efektif mengurangi biaya penyimpanan. Catatan
|
Archive |
Penagihan penyimpanan berjenjang
Untuk informasi lebih lanjut tentang penagihan penyimpanan, lihat Biaya penyimpanan.
Jika sebuah tabel atau partisi diatur ke tier penyimpanan IA atau Archive, pertimbangkan volume data dan frekuensi aksesnya. Jika data berukuran besar diakses secara sering, biaya yang dikenakan mungkin lebih tinggi daripada biaya untuk tier penyimpanan Standard.
Biaya mengakses seluruh data dalam sebuah tabel atau partisi di tier penyimpanan IA sekali per bulan setara dengan biaya penyimpanan data tersebut di tier penyimpanan Standard.
Biaya mengakses seluruh data dalam sebuah tabel atau partisi di tier penyimpanan Archive sekali setiap enam bulan setara dengan biaya penyimpanan data tersebut di tier penyimpanan Standard.
Masuk ke Expenses and Costs. Pada halaman , Anda dapat melihat biaya untuk berbagai kelas penyimpanan. Item yang dapat ditagih untuk penyimpanan Standard, penyimpanan IA, dan penyimpanan Archive masing-masing bernama Storage, Tiered Storage-IA, dan Long-term Storage. Untuk informasi lebih lanjut, lihat Lihat detail tagihan.
Lingkup penerapan
Batasan wilayah: China (Hangzhou), China (Shanghai), China (Beijing), China (Zhangjiakou), China (Ulanqab), China (Shenzhen), China (Chengdu), China (Hong Kong), China East 2 Finance, China North 2 Finance, China South 1 Finance, Singapura, Malaysia (Kuala Lumpur), Indonesia (Jakarta), Jepang (Tokyo), Jerman (Frankfurt), dan AS (Silicon Valley).
Data dalam tier penyimpanan IA dan Archive tidak dapat diakses langsung oleh Hologres. Saat Hologres membaca data langsung dari MaxCompute, last_access_time dari tabel atau partisi di MaxCompute tidak diperbarui. Oleh karena itu, jika Anda mengonfigurasi aturan lifecycle untuk penyimpanan berjenjang berdasarkan kondisi
last_access_time, beberapa tabel atau partisi yang terus-menerus hanya dibaca oleh Hologres juga dapat memenuhi aturan tersebut.
Mengatur tier penyimpanan
Anda dapat mengonversi data antar tier penyimpanan. Mengubah tier penyimpanan tidak memengaruhi akses data.
Bagian ini menjelaskan konversi kelas penyimpanan.
Konversi | Deskripsi |
Standard ke IA | Mendukung konversi manual dan otomatis. Tidak ada biaya akses I/O yang dikenakan. Waktu pembaruan data terakhir dan waktu akses data terakhir dari tabel atau partisi tidak diperbarui. |
Standard ke Archive | |
IA ke Archive | Mendukung konversi manual dan otomatis. Konversi manual dikenai biaya akses I/O, tetapi konversi otomatis tidak. Waktu pembaruan data terakhir dan waktu akses data terakhir dari tabel atau partisi tidak diperbarui. |
IA ke Standard | Hanya mendukung konversi manual. Biaya akses I/O dikenakan. Waktu pembaruan data terakhir dan waktu akses data terakhir dari tabel atau partisi diperbarui. |
Archive ke IA | |
Archive ke Standard |
Pengaturan kustom manual
Anda dapat mengatur tier penyimpanan tabel non-partisi atau partisi secara manual ke IA atau Archive. Pengaturan ini berlaku segera.
Format perintah
ALTER TABLE <TABLE_NAME> [PARTITION(<PARTITION_SPEC>)]
SET <TBLPROPERTIES|PARTITIONPROPERTIES>("storagetier"="standard|lowfrequency|longterm");Deskripsi parameter
TABLE_NAME: Wajib diisi. Nama tabel atau tabel partisi yang tier penyimpanannya ingin dimodifikasi.
PARTITION_SPEC: Wajib diisi saat Anda memodifikasi tier penyimpanan suatu partisi.
TBLPROPERTIES|PARTITIONPROPERTIES: Memodifikasi tier penyimpanan tabel atau partisi. Nilai yang valid:
TBLPROPERTIES: Memodifikasi tier penyimpanan tabel.
PARTITIONPROPERTIES: Memodifikasi tier penyimpanan partisi.
storagetier: Wajib diisi. Tier penyimpanan. Nilai yang valid:
standard: Penyimpanan Standard. Hanya biaya penyimpanan yang dikenakan.
lowfrequency: Penyimpanan IA. Biaya penyimpanan dan biaya akses data untuk penyimpanan IA dikenakan.
longterm: Penyimpanan Archive. Biaya penyimpanan dan biaya akses data untuk penyimpanan Archive dikenakan.
Untuk tabel partisi, Anda hanya dapat mengatur tier penyimpanan untuk partisinya, bukan untuk tabel itu sendiri.
Contoh penggunaan
Contoh 1: Atur tier penyimpanan tabel non-partisi ke IA.
ALTER TABLE tablename SET TBLPROPERTIES("storagetier"="lowfrequency");Lihat properti tabel. Anda dapat memeriksa tier penyimpanan saat ini di bidang
StorageTier.--Lihat properti tabel. DESC extended tablename; ---Hasil berikut dikembalikan: +-------------------------------------------------------------------+ | 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 tier penyimpanan partisi tertentu dalam tabel partisi bank_data_pt ke IA.
ALTER TABLE bank_data_pt PARTITION (credit='yes') SET PARTITIONPROPERTIES ("storagetier" = 'lowfrequency');Lihat properti partisi. Anda dapat memeriksa tier penyimpanan saat ini di bidang
StorageTier.--Lihat properti partisi. DESC extended bank_data_pt PARTITION(credit='yes'); --Hasil berikut dikembalikan: +------------------------------------------------------------------------------------+ | 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 | +------------------------------------------------------------------------------------+
Atur secara otomatis menggunakan aturan lifecycle
Anda dapat mengonfigurasi aturan lifecycle untuk penyimpanan berjenjang di tingkat project atau tabel partisi. Sistem akan secara otomatis mengonversi tier penyimpanan berdasarkan aturan tersebut.
Pengaturan tingkat project:
Setelah dikonfigurasi, aturan ini berlaku sebagai aturan default untuk semua tabel non-partisi dalam project dan untuk partisi dalam tabel partisi yang tidak memiliki aturan khusus. Tabel dan partisi tersebut akan secara otomatis dikonversi ke tier penyimpanan yang sesuai.
Pengaturan tingkat tabel partisi:
Setelah aturan khusus ditetapkan untuk tabel partisi, aturan tersebut memiliki prioritas lebih tinggi daripada aturan tingkat project. Jika semua partisi dalam tabel memenuhi aturan tersebut, partisi tersebut akan secara otomatis dikonversi ke tier penyimpanan yang sesuai.
Batasan penting
Aturan tidak dapat dikonfigurasi pada granularitas yang lebih rinci:
Anda tidak dapat menetapkan aturan independen untuk satu tabel non-partisi. Tabel tersebut mewarisi aturan project.
Anda tidak dapat menetapkan aturan independen untuk partisi tertentu dalam tabel partisi. Partisi tersebut mewarisi aturan tabel partisi induknya.
Eksekusi aturan
Jika sebuah tabel atau partisi memenuhi aturan penyimpanan Archive (longterm) dan aturan penyimpanan IA (lowfrequency), tabel atau partisi tersebut akan dikonversi ke
longtermsebagai preferensi.Jika lifecycle tabel atau partisi pertama kali memenuhi aturan
lowfrequency, tabel atau partisi tersebut dikonversi ke tierlowfrequency. Jika kemudian memenuhi aturanlongterm, tabel atau partisi tersebut dikonversi ke tierlongterm. Tidak ada biaya akses yang dikenakan untuk tierlowfrequencyselama konversi darilowfrequencykelongterm. Untuk detail penagihan, lihat Penagihan penyimpanan berjenjang.Platform memindai aturan dua kali sehari. Oleh karena itu, konversi mungkin tidak dilakukan segera setelah kondisi terpenuhi dan dapat terjadi penundaan.
Format perintah
Tetapkan aturan lifecycle di tingkat project
SETPROJECT odps.table.lifecycle.config=<lifecycle_config_json_string>;Anda juga dapat mengonfigurasi aturan tersebut di Konsol MaxCompute sebagai berikut:
Masuk ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.
Di panel navigasi sebelah kiri, pilih .
Pada halaman Projects, temukan project target dan klik Manage di kolom Actions.
Pada halaman Project Settings, Anda dapat memilih tab Parameter Configuration.
Di bagian Lifecycle Configuration, klik Edit.
Konfigurasikan parameter Last Access Configuration Policy dan Last Modified Configuration Policy.
Last Access Configuration Policy: bersesuaian dengan parameter
DaysAfterLastAccessGreaterThan.Last Modified Configuration Policy: bersesuaian dengan parameter
DaysAfterLastModificationGreaterThan.
Tetapkan aturan lifecycle untuk tabel partisi
Tetapkan aturan saat membuat tabel partisi:
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>') ;Modifikasi aturan untuk tabel partisi:
ALTER TABLE <TABLE_NAME> SET TBLPROPERTIES ('lifecycle_config' = '<lifecycle_config_json_string>');
Lihat konfigurasi aturan lifecycle untuk penyimpanan berjenjang tabel partisi
SHOW CREATE TABLE <table_name>;
Deskripsi parameter
Tabel berikut menjelaskan parameter utama. Untuk informasi lebih lanjut, lihat Parameter umum.
lifecycle_config_json_string:
Aturan lifecycle yang ditetapkan di tingkat project didefinisikan sebagai berikut.
{ "TierToLowFrequency": { "DaysAfterLastModificationGreaterThan": <days>, // Jumlah hari setelah modifikasi terakhir. "DaysAfterLastAccessGreaterThan": <days>, // Jumlah hari setelah akses terakhir. }, "TierToLongterm": { "DaysAfterLastModificationGreaterThan": <days>, "DaysAfterLastAccessGreaterThan": <days> } // Setiap kondisi bersifat opsional. Beberapa kondisi memiliki hubungan OR. }Kode berikut menunjukkan definisi aturan lifecycle untuk tabel partisi.
{ \"TierToLowFrequency\": { \"DaysAfterLastModificationGreaterThan\": <days>, // Jumlah hari setelah modifikasi terakhir. \"DaysAfterLastAccessGreaterThan\": <days>, // Jumlah hari setelah akses terakhir. }, \"TierToLongterm\": { \"DaysAfterLastModificationGreaterThan\": <days>, \"DaysAfterLastAccessGreaterThan\": <days> } // Setiap kondisi bersifat opsional. Beberapa kondisi memiliki hubungan OR. }TierToLowFrequency: Identifier untuk tier penyimpanan IA.
TierToLongterm: Identifier untuk tier penyimpanan Archive.
DaysAfterLastModificationGreaterThan: Jumlah hari setelah waktu modifikasi data terakhir untuk memicu konversi otomatis. Nilai ini bersesuaian dengan LastModifiedTime dari tabel atau partisi.
DaysAfterLastAccessGreaterThan: Jumlah hari setelah waktu akses data terakhir untuk memicu konversi otomatis. Jika LastAccessTime dari tabel atau partisi kosong:
Untuk tabel atau partisi yang dibuat sebelum 1 Oktober 2023, waktu dihitung berdasarkan
2023-10-01 00:00:00di zona waktu UTC+0 secara default.Untuk tabel atau partisi yang dibuat pada atau setelah 1 Oktober 2023, jika data belum pernah diakses, waktu dihitung berdasarkan CreateTime.
Contoh penggunaan
Contoh 1: Tetapkan aturan lifecycle di tingkat project.
setproject odps.table.lifecycle.config={"TierToLongterm":{"DaysAfterLastAccessGreaterThan":180},"TierToLowFrequency":{"DaysAfterLastAccessGreaterThan":120}};Contoh 2: Batalkan konfigurasi lifecycle di tingkat project.
setproject odps.table.lifecycle.config=;Contoh 3: Tetapkan aturan lifecycle untuk tabel partisi.
--Tetapkan aturan saat membuat tabel partisi. CREATE TABLE lifecycle_part_t (key string) PARTITIONED BY (ds STRING) tblproperties ('lifecycle_config' = '{\"TierToLowFrequency\": {\"DaysAfterLastModificationGreaterThan\": 2,\"DaysAfterLastAccessGreaterThan\": 2},\"TierToLongterm\": {\"DaysAfterLastModificationGreaterThan\": 4,\"DaysAfterLastAccessGreaterThan\": 7}}') ; --Modifikasi aturan untuk tabel partisi. ALTER TABLE lifecycle_part_t SET tblproperties ('lifecycle_config'='{\"TierToLowFrequency\": {\"DaysAfterLastModificationGreaterThan\": 90,\"DaysAfterLastAccessGreaterThan\": 30},\"TierToLongterm\": {\"DaysAfterLastModificationGreaterThan\": 180,\"DaysAfterLastAccessGreaterThan\": 7}}');Contoh 4: Batalkan konfigurasi lifecycle untuk penyimpanan berjenjang tabel partisi.
ALTER TABLE lifecycle_part_t SET tblproperties ('lifecycle_config'='{}');
Konfigurasi izin akses untuk data penyimpanan berjenjang
Mengakses data di tier penyimpanan IA atau Archive dikenai biaya akses. Anda dapat menggunakan fungsi GET_PARTITION_META dengan kontrol akses tingkat baris untuk mengelola izin akses data di tier penyimpanan IA atau Archive dan secara efektif mengontrol akses.
GET_PARTITION_META
GET_PARTITION_META adalah fungsi khusus yang hanya dapat digunakan bersama kontrol akses tingkat baris. Fungsi ini tidak dapat digunakan dalam kueri SQL biasa.
Sintaks
struct GET_PARTITION_META(<tableName>, <pt_col1>, <pt_col2>, ..., <pt_col_n>);Deskripsi parameter
Parameter | Deskripsi |
tableName | Nama tabel. Tabel harus berupa tabel partisi. Nilainya bertipe String. Nama dapat dalam format |
pt_col | Setiap parameter dari pt_col1 hingga pt_col_n sesuai dengan tingkat partisi dari tabel partisi. Setiap parameter harus berupa referensi kolom. |
Nilai kembali
Mengembalikan nilai Struct bertipe struct<storagetier:string>. Struct tersebut berisi satu bidang String yang menjelaskan tier penyimpanan partisi yang bersesuaian.
Perhatian
Saat Anda menambahkan aturan tingkat baris ke tabel, pertimbangkan perilaku akses pengguna lain. Jika pengguna lain telah mengakses tabel tersebut, tetapkan aturan eksplisit untuk mereka guna mencegah penolakan akses yang tidak diinginkan dan masalah penyaringan data. Untuk informasi lebih lanjut, lihat Kontrol akses tingkat baris.
Secara default, tabel MaxCompute dapat diakses tidak hanya melalui SQL tetapi juga oleh mesin eksternal, seperti Spark dan Flink, yang membaca data tabel. Namun, fungsi GET_PARTITION_META saat ini hanya didukung oleh mesin SQL MaxCompute. Oleh karena itu, jika fungsi GET_PARTITION_META digunakan dalam kontrol akses tingkat baris, tabel tersebut hanya dapat dibaca melalui mesin SQL MaxCompute. Mesin lain tidak dapat mengakses tabel tersebut.
Untuk mengakses data, Anda harus memiliki izin akses data, khususnya izin SELECT pada data, selain memenuhi persyaratan izin tingkat baris.
Kondisi filter dalam GET_PARTITION_META menghasilkan efek pemangkasan partisi yang berbeda tergantung skenarionya.
Kondisi filter hanya melibatkan bidang partisi dari tabel partisi. Misalnya, Anda dapat mengizinkan akses ke tier penyimpanan Standard dan mensyaratkan bahwa nilai partisi tingkat pertama adalah
2024.GET_PARTITION_META('storage_table', pt1, pt2).storagetier == 'standard') AND pt1='2024'Saat Anda menggunakan SQL untuk mengakses
storage_table, jika klausa WHERE tidak berisi kondisi partisi, sistem mendukung pemangkasan partisi untuk mencegah pemindaian tabel penuh. Hanya partisi dalamstorage_tableyang memenuhi persyaratan yang diakses.Kondisi filter berisi nilai bidang non-partisi, dan operator AND digunakan untuk menghubungkan kedua kondisi filter tersebut. Misalnya, Anda dapat mengizinkan akses ke tier penyimpanan Standard dan menggunakan operator AND dengan nilai non-partisi
a>100.GET_PARTITION_META('storage_table', pt1, pt2).storagetier == 'standard') AND a > 100Saat Anda menggunakan SQL untuk mengakses
storage_table, jika klausa WHERE tidak berisi kondisi partisi, pemangkasan partisi tetap didukung. Hanya partisi yang disimpan di tierstandardyang diakses.Kondisi filter berisi nilai bidang non-partisi, dan operator OR digunakan untuk menghubungkan kedua kondisi filter tersebut. Misalnya, Anda dapat mengizinkan akses ke tier penyimpanan Standard dan menggunakan operator OR dengan nilai non-partisi
a>100.get_partition_meta('storage_table', pt1, pt2).storagetier == 'standard') OR a > 100Saat Anda menggunakan SQL untuk mengakses
storage_table, dua skenario mungkin terjadi:Jika klausa WHERE tidak berisi kondisi partisi, semua partisi diakses untuk memindai data yang memenuhi kondisi
a>100.Jika klausa WHERE berisi kondisi partisi, hanya data dalam partisi yang bersesuaian yang memenuhi kondisi
standardataua>100yang dipindai.
Contoh penggunaan
Definisikan tabel partisi storage_table.
CREATE TABLE storage_table(a BIGINT, b BIGINT) PARTITIONED BY (pt1 STRING, pt2 STRING);Contoh 1:
Berikan izin
policy01kepada pengguna default untuk mengakses data penyimpanan Standard distorage_table. Semua pengguna, termasuk pemilik project, tidak dapat mengakses data penyimpanan IA atau Archive, dan nilai null dikembalikan untuk permintaan tersebut.CREATE ROW ACCESS POLICY policy01 ON storage_table TO DEFAULT FILTER USING (get_partition_meta('storage_table', pt1, pt2).storagetier == 'standard');Jika kata kunci berikut muncul di bagian Summary Logview, penyaringan tingkat baris dipicu.

Contoh 2:
Berikan izin
policy02kepada penggunauser_xuntuk mengakses data penyimpanan IA dan Archive distorage_table.CREATE ROW ACCESS POLICY policy02 ON storage_table TO USER (user_x) --Anda juga dapat memberikan izin kepada role menggunakan TO role rolename lalu memberikan role tersebut kepada pengguna. FILTER USING (get_partition_meta('storage_table', pt1, pt2).storagetier IN ('lowfrequency','longterm'));Dua skenario mungkin terjadi:
Jika tabel sudah memiliki izin
policy01, semua pengguna kecuali `user_x` dapat mengakses data penyimpanan Standard distorage_tabletetapi tidak dapat mengakses data penyimpanan IA atau Archive. Nilai null dikembalikan untuk data yang tidak dapat diakses. Pengguna `user_x` dapat mengakses data penyimpanan IA dan Archive distorage_tabletetapi tidak dapat mengakses data penyimpanan Standard. Nilai null dikembalikan untuk data yang tidak dapat diakses ini.Jika izin
policy01tidak dikonfigurasi untuk tabel tersebut, semua pengguna kecuali `user_x` ditolak akses ke data penyimpanan apa pun distorage_table, yang menghasilkan nilai kembalian null. Hanya `user_x` yang diberikan akses ke data penyimpanan IA dan Archive tetapi ditolak akses ke data penyimpanan Standard, yang juga menghasilkan nilai null.
Contoh 3:
Berikan izin
policy03kepada penggunauser_yuntuk mengakses semua data distorage_table.CREATE ROW ACCESS POLICY policy03 ON storage_table TO USER (user_y) -- Anda juga dapat memberikan izin kepada role menggunakan klausa TO role rolename lalu memberikan role tersebut kepada pengguna. FILTER USING (true); -- Konstanta true menunjukkan bahwa semua data dalam tabel dapat diaksesDua skenario mungkin terjadi:
Jika tabel memiliki izin
policy01, semua pengguna kecuali `user_y` dapat mengakses data penyimpanan Standard distorage_table. Mereka tidak dapat mengakses data penyimpanan IA atau Archive, dan nilai null dikembalikan untuk permintaan tersebut. Penggunauser_ydapat mengakses data dari semua kelas penyimpanan distorage_table.Jika tabel tidak memiliki izin
policy01, semua pengguna kecuali `user_y` tidak dapat mengakses data apa pun distorage_table, dan nilai null dikembalikan. Hanya penggunauser_yyang dapat mengakses data semua kelas penyimpanan distorage_table.