Buat dan hapus tabel non-partisi, partisi, eksternal, terkluster, transaksional, serta Delta di MaxCompute.
|
Type |
Description |
Required permission |
Execution tools |
|
Membuat tabel non-partisi, partisi, eksternal, atau terkluster. |
Memerlukan izin CreateTable pada Proyek. |
Jalankan perintah ini di: |
|
|
Menghapus tabel partisi atau non-partisi. |
Memerlukan izin Drop pada tabel. |
Membuat tabel
Buat tabel non-partisi, partisi, eksternal, atau terkluster.
Batasan
-
Tabel partisi dapat memiliki hingga enam level partisi. Misalnya, Anda dapat menggunakan tanggal sebagai kolom partisi dan menentukan level seperti
year/month/week/day/hour/minute. -
Jumlah maksimum partisi per tabel dapat dikonfigurasi berdasarkan per-Proyek, dengan nilai default 60.000.
Batasan tambahan untuk tabel didokumentasikan di Batasan SQL MaxCompute.
Sintaks
Tabel internal
Buat tabel internal (non-partisi atau partisi)
CREATE [OR REPLACE] TABLE [IF NOT EXISTS] <table_name> (
<col_name> <data_type>, ... )
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type> [COMMENT <col_comment>], ...)]
[AUTO PARTITIONED
BY (<auto_partition_expression> [AS <auto_partition_column_name>])
[TBLPROPERTIES('ingestion_time_partition'='true')]
];
Tabel terkluster
Buat tabel terkluster
CREATE TABLE [IF NOT EXISTS] <table_name> (
<col_name> <data_type>, ... )
[CLUSTERED BY | RANGE CLUSTERED BY (<col_name> [, <col_name>, ...])
[SORTED BY (<col_name> [ASC | DESC] [, <col_name> [ASC | DESC] ...])]
INTO <number_of_buckets> BUCKETS];
Tabel eksternal
Buat tabel eksternal
Contoh ini membuat tabel eksternal OSS menggunakan parser data teks bawaan. Format lain dibahas di Tabel eksternal ORC.
CREATE EXTERNAL TABLE [IF NOT EXISTS] <mc_oss_extable_name> (
<col_name> <data_type>, ... )
STORED AS '<file_format>'
[WITH SERDEPROPERTIES (options)]
LOCATION '<oss_location>';
Tabel transaksional dan Delta
-
Buat tabel transaksional. Jenis tabel ini mendukung operasi UPDATE atau DELETE, namun memiliki sejumlah batasan.
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] <table_name> ( <col_name <data_type> [NOT NULL] [DEFAULT <default_value>] [COMMENT <col_comment>], ... [COMMENT <table_comment>] [TBLPROPERTIES ("transactional"="true")]; -
Buat tabel Delta. Ketika digabungkan dengan primary key, tabel ini memungkinkan operasi seperti upsert, kueri inkremental, dan time travel.
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] <table_name> ( <col_name <data_type> [NOT NULL] [DEFAULT <default_value>] [COMMENT <col_comment>], ... [PRIMARY KEY (<pk_col_name>[, <pk_col_name2>, ...] )]) [COMMENT <table_comment>] [CLUSTERED BY (<pk_col_name>[, <pk_col_name2>, ...] )] [TBLPROPERTIES ("transactional"="true" [, "write.bucket.num" = "N", "acid.data.retain.hours"="hours"...])] [LIFECYCLE <days>];-
Tabel Delta dengan primary key memungkinkan penggunaan subset dari primary key sebagai kunci kluster hash.
Pada tabel Delta dengan primary key, sistem secara default menerapkan pengelompokan hash menggunakan seluruh primary key sebagai kunci kluster. Jika kueri sering melakukan filter pada subset kolom primary key, tentukan secara eksplisit subset tersebut sebagai kunci kluster untuk meningkatkan performa filtering.
-
Jika Anda secara eksplisit menentukan kunci kluster, sistem mendistribusikan data tabel ke dalam bucket hash berdasarkan kolom yang ditentukan. Kunci kluster harus merupakan subset dari kolom primary key.
Jika tidak ditentukan secara eksplisit, sistem menggunakan seluruh set kolom primary key sebagai kunci kluster default.
Kunci kluster tidak dapat diubah setelah tabel dibuat; Anda harus menentukannya saat pembuatan tabel.
-
Klausa CTAS dan LIKE
-
Buat tabel baru berdasarkan tabel yang ada dan salin datanya, tetapi tanpa menyalin properti partisi. Klausa ini berlaku untuk tabel eksternal dan tabel di Proyek Lakehouse eksternal.
CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] AS <select_statement>; -
Buat tabel baru dengan struktur yang sama seperti tabel yang ada, tetapi tanpa menyalin datanya. Klausa ini berlaku untuk tabel eksternal dan tabel di Proyek Lakehouse eksternal.
CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] LIKE <existing_table_name>;
Parameter
Parameter umum
Parameter umum
|
Parameter |
Required |
Description |
Remarks |
|
OR REPLACE |
No |
|
Ini setara dengan menjalankan perintah berikut:
|
|
EXTERNAL |
No |
Membuat tabel eksternal. |
N/A |
|
IF NOT EXISTS |
No |
Membuat tabel hanya jika belum ada tabel dengan nama yang sama. |
Tanpa IF NOT EXISTS, membuat tabel dengan nama duplikat menghasilkan error. Dengan IF NOT EXISTS, pernyataan berhasil meskipun tabel dengan nama yang sama sudah ada dengan skema berbeda. Metadata tabel yang ada tetap tidak berubah. |
|
table_name |
Yes |
Nama tabel. |
Nama tabel harus terdiri dari 128 byte atau kurang dan hanya boleh berisi huruf, angka, serta garis bawah (_). Nama bersifat case-insensitive. Disarankan untuk memulai nama dengan huruf. |
|
PRIMARY KEY(pk) |
No |
Primary key tabel. |
Tentukan satu atau beberapa kolom sebagai primary key untuk memastikan keunikan kombinasi kolom tersebut. Mengikuti sintaks standard SQL untuk primary key. Kolom primary key harus NOT NULL dan tidak dapat dimodifikasi. Penting
Parameter ini hanya berlaku untuk Tabel Delta. |
|
col_name |
Yes |
Nama kolom. |
|
|
col_comment |
No |
Komentar kolom. |
Harus berupa string sepanjang 1.024 byte atau kurang. |
|
data_type |
Yes |
Tipe data kolom. |
Tipe yang didukung: BIGINT, DOUBLE, BOOLEAN, DATETIME, DECIMAL, STRING, dan lainnya yang tercantum di Tipe data. |
|
NOT NULL |
No |
Menentukan bahwa kolom tidak boleh berisi nilai NULL. |
Untuk informasi lebih lanjut tentang cara memodifikasi properti NOT NULL, lihat Operasi partisi. |
|
default_value |
No |
Nilai default untuk kolom. |
Jika operasi Catatan
Fungsi seperti |
|
table_comment |
No |
Komentar tabel. |
Harus berupa string sepanjang 1.024 byte atau kurang. |
|
LIFECYCLE |
No |
Siklus hidup tabel, dalam satuan hari. |
Hanya bilangan bulat positif yang didukung. Satuannya adalah hari.
|
Parameter tabel partisi
Parameter tabel partisi
MaxCompute mendukung tabel partisi standar dan otomatis. Pilih jenisnya berdasarkan cara kolom partisi dihasilkan. Lihat Ikhtisar tabel partisi.
Parameter tabel partisi standar
|
Parameter |
Required |
Description |
Remarks |
|
PARTITIONED BY |
Yes |
Menentukan partisi untuk tabel partisi standar. |
Anda dapat menentukan partisi menggunakan PARTITIONED BY atau AUTO PARTITIONED BY, tetapi tidak keduanya sekaligus. |
|
col_name |
Yes |
Nama kolom partisi. |
|
|
data_type |
Yes |
Tipe data kolom partisi. |
MaxCompute V1.0 hanya mendukung STRING. V2.0 menambahkan TINYINT, SMALLINT, INT, BIGINT, dan VARCHAR (STRING tetap didukung). Daftar lengkap tersedia di Tipe data. Partisi menghilangkan pemindaian tabel penuh untuk operasi tingkat partisi. |
|
col_comment |
No |
Komentar untuk kolom partisi. |
Harus berupa string sepanjang 1.024 byte atau kurang. |
Nilai partisi harus terdiri dari maksimal 255 byte dan tidak boleh berisi karakter double-byte, seperti karakter Tionghoa. Nilai harus dimulai dengan huruf dan hanya boleh berisi huruf, angka, serta karakter berikut: spasi, titik dua (:), garis bawah (_), tanda dolar ($), tanda pagar (#), titik (.), tanda seru (!), dan tanda at (@). Perilaku karakter lain, seperti karakter escape \t, \n, dan /, tidak terdefinisi.
Parameter tabel partisi otomatis
Tabel partisi otomatis menghasilkan kolom partisi secara otomatis. Detail penggunaannya tersedia di Jenis tabel partisi.
|
Parameter |
Required |
Description |
Remarks |
|
AUTO PARTITIONED BY |
Yes |
Menentukan partisi untuk tabel partisi otomatis. |
Anda dapat menentukan partisi menggunakan PARTITIONED BY atau AUTO PARTITIONED BY, tetapi tidak keduanya sekaligus. |
|
auto_partition_expression |
Yes |
Ekspresi yang menentukan cara kolom partisi dihitung. Saat ini, hanya fungsi TRUNC_TIME yang dapat digunakan untuk menghasilkan kolom partisi. Hanya satu kolom partisi yang didukung. |
Fungsi TRUNC_TIME dapat memotong data dari kolom bertipe waktu atau tanggal berdasarkan unit waktu tertentu untuk menghasilkan kolom partisi. |
|
auto_partition_column_name |
No |
Nama kolom partisi yang dihasilkan. Jika nama tidak ditentukan, sistem menggunakan |
Berdasarkan perhitungan dari ekspresi partisi, kolom partisi bertipe STRING dihasilkan. Anda dapat secara eksplisit menentukan nama untuk kolom ini, tetapi Anda tidak dapat langsung memodifikasi tipe data atau nilainya. |
|
TBLPROPERTIES('ingestion_time_partition'='true') |
No |
Menentukan apakah kolom partisi dihasilkan berdasarkan waktu pemasukan data. |
Partisi berdasarkan waktu pemasukan data dijelaskan di Tabel partisi otomatis berdasarkan waktu pemasukan data. |
Parameter tabel terkluster
Parameter tabel terkluster
Tabel terkluster dikategorikan menjadi tabel hash-clustered dan tabel range-clustered.
Tabel hash-clustered
|
Parameter |
Required |
Description |
Remarks |
|
CLUSTERED BY |
Yes |
Menentukan kunci hash. MaxCompute menghitung nilai hash untuk kolom yang ditentukan dan mendistribusikan data ke dalam bucket hash berdasarkan nilai-nilai tersebut. |
Untuk mencegah kesenjangan data dan mencapai paralelisme yang baik, pilih kolom dengan kardinalitas tinggi dan sedikit duplikat untuk klausa |
|
SORTED BY |
Yes |
Menentukan urutan pengurutan kolom dalam setiap bucket hash. |
Untuk performa optimal, gunakan kolom yang sama untuk SORTED BY dan CLUSTERED BY. Setelah Anda menentukan klausa SORTED BY, MaxCompute secara otomatis membuat Indeks dan menggunakannya untuk mempercepat kueri. |
|
number_of_buckets |
Yes |
Menentukan jumlah bucket hash. |
Nilai ini wajib dan nilainya bergantung pada volume data. |
Saat memilih jumlah bucket hash, ikuti dua prinsip berikut:
-
Pertahankan ukuran bucket hash yang moderat: Ukuran yang disarankan untuk setiap bucket hash adalah sekitar 500 MB. Misalnya, jika perkiraan ukuran partisi adalah 500 GB, atur jumlah bucket menjadi 1.000 sehingga ukuran rata-rata bucket hash sekitar 500 MB. Untuk tabel yang sangat besar, ukuran bucket dapat melebihi 500 MB; rentang 2 GB hingga 3 GB per bucket masih sesuai.
-
Untuk mengoptimalkan operasi
join, menghilangkan langkah shuffle dan sort secara signifikan meningkatkan performa. Hal ini memerlukan jumlah bucket hash pada kedua tabel saling kelipatan, misalnya 256 dan 512. Disarankan untuk mengatur jumlah bucket hash sebagai pangkat dari 2 (2n), seperti 512, 1024, 2048, atau 4096. Pendekatan ini memungkinkan sistem secara otomatis membagi atau menggabungkan bucket hash serta menghilangkan langkah shuffle dan sort, sehingga meningkatkan efisiensi eksekusi.
Tabel range-clustered
|
Parameter |
Required |
Description |
Remarks |
|
RANGE CLUSTERED BY |
Yes |
Menentukan kolom range-cluster. |
MaxCompute melakukan operasi bucketing pada kolom yang ditentukan dan mendistribusikan data ke dalam bucket berdasarkan nomor bucket. |
|
SORTED BY |
Yes |
Menentukan urutan pengurutan kolom dalam setiap bucket. |
Penggunaannya sama seperti pada tabel hash-clustered. |
|
number_of_buckets |
Yes |
Menentukan jumlah bucket. |
Untuk tabel range-clustered, praktik terbaik menggunakan pangkat dari 2 (2n) yang berlaku untuk tabel hash-clustered tidak diperlukan. Jumlah bucket apa pun dapat diterima asalkan data terdistribusi merata. Parameter ini opsional untuk tabel range-clustered. Jika Anda mengabaikannya, sistem secara otomatis menentukan jumlah bucket optimal berdasarkan volume data. |
Saat operasi join atau agregasi dilakukan pada tabel range-clustered, jika kunci join atau kunci group adalah kunci range clustering atau prefiksnya, redistribusi data (shuffle) dapat dihilangkan untuk meningkatkan performa. Fitur ini dapat diaktifkan atau dinonaktifkan dengan menjalankan perintah set odps.optimizer.enable.range.partial.repartitioning=true/false;. Secara default, fitur ini dinonaktifkan.
-
Manfaat tabel terkluster:
-
Pemangkasan bucket yang dioptimalkan
-
Agregasi yang dioptimalkan
-
Penyimpanan yang dioptimalkan
-
-
Batasan tabel terkluster:
-
INSERT INTOtidak didukung. Data hanya dapat ditambahkan menggunakanINSERT OVERWRITE. -
Mengunggah data langsung ke tabel range-clustered melalui Tunnel tidak didukung karena Tunnel mengunggah data secara tidak terurut.
-
Fitur pencadangan dan pemulihan tidak didukung.
-
Parameter tabel eksternal
Parameter tabel eksternal
Bagian ini mencakup parameter tabel eksternal OSS. Jenis tabel eksternal lainnya didokumentasikan di Tabel eksternal.
|
Parameter |
Required |
Description |
|
|
Yes |
Menentukan file_format berdasarkan format data tabel eksternal. |
|
|
No |
Menentukan parameter terkait otorisasi, kompresi, dan parsing karakter untuk tabel eksternal. |
|
oss_location |
Yes |
Lokasi penyimpanan OSS untuk data tabel eksternal. Untuk informasi lebih lanjut, lihat Tabel eksternal OSS. |
Parameter Tabel Transaksional dan Tabel Delta
Parameter Tabel Transaksional dan Tabel Delta
Parameter Tabel Delta
Tabel Delta adalah format tabel yang mendukung pembacaan dan penulisan near-real-time, penyimpanan dan akses inkremental, serta pembaruan real-time. Saat ini, hanya tabel dengan primary key yang didukung.
|
Parameter |
Required |
Description |
Remarks |
|
PRIMARY KEY(PK) |
Yes |
Menentukan primary key untuk Tabel Delta, yang dapat mencakup beberapa kolom. |
Sintaks mengikuti sintaks standard SQL untuk primary key. Kolom primary key harus diatur sebagai NOT NULL dan tidak dapat dimodifikasi. Setelah primary key ditetapkan, data akan dihapus duplikatnya berdasarkan kolom primary key. Batasan unik diberlakukan dalam satu partisi atau dalam tabel non-partisi. |
|
transactional |
Yes |
Wajib untuk membuat Tabel Delta. Anda harus mengatur parameter ini ke |
Menunjukkan bahwa tabel mendukung properti transaksional tabel ACID MaxCompute. Tabel menggunakan model Kontrol Konkurensi Multi-Versi (MVCC) untuk memastikan tingkat isolasi snapshot. |
|
write.bucket.num |
No |
Nilai default adalah 16. Rentang valid adalah |
Menentukan jumlah bucket untuk setiap partisi atau untuk tabel non-partisi. Ini juga menunjukkan jumlah node konkuren untuk penulisan data. Anda dapat memodifikasi parameter ini untuk tabel partisi, dan pengaturan baru berlaku untuk partisi baru. Anda tidak dapat memodifikasi parameter ini untuk tabel non-partisi. Pertimbangkan rekomendasi berikut:
|
|
acid.data.retain.hours |
No |
Nilai default adalah 24. Rentang valid adalah |
Menentukan rentang waktu dalam jam yang memungkinkan Anda mengkueri status data historis menggunakan Time Travel. Jika Anda memerlukan riwayat Time Travel lebih dari 168 jam (7 hari), hubungi dukungan teknis MaxCompute.
|
|
acid.incremental.query.out.of.time.range.enabled |
No |
Nilai default: |
Jika |
|
acid.write.precombine.field |
No |
Menentukan nama satu kolom. |
Jika nama kolom ditentukan, sistem menggunakan kolom ini bersama dengan kolom primary key untuk menghapus duplikat data dalam satu commit yang sama. Hal ini memastikan keunikan dan konsistensi data. Catatan
Jika satu commit data melebihi 128 MB, beberapa file akan dihasilkan. Parameter ini tidak berlaku lintas beberapa file. |
|
acid.partial.fields.update.enable |
No |
Jika diatur ke |
Parameter ini diatur saat Anda membuat tabel. Parameter ini tidak dapat dimodifikasi setelah tabel dibuat. |
-
Persyaratan parameter lain untuk Tabel Delta:
-
LIFECYCLE: Siklus hidup tabel harus lebih besar dari atau sama dengan periode retensi time travel, yaitu
lifecycle >= acid.data.retain.hours / 24. Pemeriksaan dilakukan saat tabel dibuat, dan error dilaporkan jika kondisi ini tidak terpenuhi. -
Fitur yang tidak didukung:
CLUSTERED BY,EXTERNAL, danCREATE TABLE AStidak didukung.
-
-
Batasan lain:
-
Saat ini, engine lain tidak dapat langsung beroperasi pada Tabel Delta. Hanya SQL MaxCompute yang didukung.
-
Tabel standar tidak dapat dikonversi menjadi Tabel Delta.
-
Perubahan skema pada kolom primary key Tabel Delta tidak diperbolehkan.
-
Parameter Tabel Transaksional
|
Parameter |
Required |
Description |
|
TBLPROPERTIES("transactional"="true") |
Yes |
Mengatur tabel sebagai Tabel Transaksional, yang mengaktifkan operasi |
Berikut batasan yang berlaku untuk Tabel Transaksional:
-
Properti
transactionalhanya dapat diatur saat pembuatan tabel. Properti ini tidak dapat dimodifikasi pada tabel yang sudah ada menggunakanALTER TABLE. Pernyataan berikut akan mengembalikan error:ALTER TABLE not_txn_tbl SET TBLPROPERTIES("transactional"="true"); -- Error dikembalikan. FAILED: Catalog Service Failed, ErrorCode: 151, Error Message: Set transactional is not supported -
Tabel terkluster atau tabel eksternal tidak dapat diatur sebagai Tabel Transaksional.
-
Konversi antara tabel internal standar, tabel eksternal, atau tabel terkluster dengan Tabel Transaksional tidak didukung.
-
Pemadatan otomatis tidak didukung. Lakukan pemadatan file secara manual seperti yang dijelaskan dalam Memadatkan file dalam Tabel Transaksional.
-
Operasi
merge partitiontidak didukung. -
Akses ke Tabel Transaksional dari sistem lain terbatas. Misalnya, MaxCompute Graph tidak mendukung operasi baca atau tulis. Spark dan PAI hanya mendukung operasi baca.
-
Sebelum melakukan operasi
update,delete, atauinsert overwritepada data penting, lakukan pencadangan manual ke tabel lain menggunakan pernyataanSELECT...INSERT.
Buat tabel (dari yang sudah ada)
Buat tabel (dari yang sudah ada)
-
Gunakan pernyataan
CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] AS <select_statement>;untuk membuat tabel baru sekaligus menyalin data ke dalamnya.-
Pernyataan ini tidak menyalin properti partisi. Kolom partisi dari tabel sumber diperlakukan sebagai kolom biasa di tabel tujuan. Properti lifecycle dari tabel sumber juga tidak disalin.
-
Anda dapat menggunakan parameter lifecycle untuk menentukan siklus hidup tabel baru. Pernyataan ini mendukung pembuatan tabel internal dan penyalinan data dari tabel eksternal.
-
-
Gunakan pernyataan
CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] LIKE <existing_table_name>;untuk membuat tabel baru dengan skema yang sama seperti tabel yang ada.-
Pernyataan ini menyalin skema, tetapi tidak menyalin data atau properti lifecycle dari tabel sumber.
-
Anda dapat menggunakan parameter lifecycle untuk menentukan siklus hidup tabel baru. Pernyataan ini juga mendukung pembuatan tabel internal dengan skema yang disalin dari tabel eksternal.
-
Contoh
Tabel non-partisi
-
Buat tabel non-partisi.
CREATE TABLE test1 (key STRING); -
Buat tabel non-partisi dan tentukan nilai default untuk kolom.
CREATE TABLE test_default( tinyint_name tinyint NOT NULL default 1Y, smallint_name SMALLINT NOT NULL DEFAULT 1S, int_name INT NOT NULL DEFAULT 1, bigint_name BIGINT NOT NULL DEFAULT 1, binary_name BINARY , float_name FLOAT , double_name DOUBLE NOT NULL DEFAULT 0.1, decimal_name DECIMAL(2, 1) NOT NULL DEFAULT 0.0BD, varchar_name VARCHAR(10) , char_name CHAR(2) , string_name STRING NOT NULL DEFAULT 'N', boolean_name BOOLEAN NOT NULL DEFAULT TRUE );
Tabel partisi
-
Buat tabel partisi AUTO PARTITION yang menghasilkan partisi berdasarkan kolom data berbasis waktu menggunakan fungsi waktu.
-- Kolom sale_date dipotong berdasarkan bulan untuk menghasilkan kolom partisi bernama sale_month. Tabel kemudian dipartisi berdasarkan kolom ini. CREATE TABLE IF NOT EXISTS auto_sale_detail( shop_name STRING, customer_id STRING, total_price DOUBLE, sale_date DATE ) AUTO PARTITIONED BY (TRUNC_TIME(sale_date, 'month') AS sale_month); -
Buat tabel partisi AUTO PARTITION yang menghasilkan partisi berdasarkan waktu pemasukan data. Sistem secara otomatis mengambil waktu ketika data ditulis ke MaxCompute dan menghasilkan partisi menggunakan fungsi waktu.
-- Setelah tabel dibuat, saat data ditulis, sistem secara otomatis menangkap waktu pemasukan data (_partitiontime), memotongnya berdasarkan hari, menghasilkan kolom partisi bernama sale_date, lalu mempartisi tabel berdasarkan kolom ini. CREATE TABLE IF NOT EXISTS auto_sale_detail2( shop_name STRING, customer_id STRING, total_price DOUBLE, _partitiontime TIMESTAMP_NTZ) AUTO PARTITIONED BY (TRUNC_TIME(_partitiontime, 'day') AS sale_date) TBLPROPERTIES('ingestion_time_partition'='true');
Tabel hash atau range clustered
-
Buat tabel hash-clustered non-partisi.
CREATE TABLE t1 (a STRING, b STRING, c BIGINT) CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets; -
Buat tabel hash-clustered partisi.
CREATE TABLE t2 (a STRING, b STRING, c BIGINT) PARTITIONED BY (dt STRING) CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets; -
Buat tabel range-clustered non-partisi.
CREATE TABLE t3 (a STRING, b STRING, c BIGINT) RANGE CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets; -
Buat tabel range-clustered partisi.
CREATE TABLE t4 (a STRING, b STRING, c BIGINT) PARTITIONED BY (dt STRING) RANGE CLUSTERED BY (c) SORTED BY (c);
Tabel transaksional
-
Buat tabel transaksional non-partisi.
CREATE TABLE t5(id BIGINT) TBLPROPERTIES ("transactional"="true"); -
Buat tabel transaksional partisi.
CREATE TABLE IF NOT EXISTS t6(id BIGINT) PARTITIONED BY (ds STRING) TBLPROPERTIES ("transactional"="true");
Tabel internal
-
Buat tabel internal dengan menyalin data dari tabel partisi eksternal. Tabel internal tidak akan menyertakan properti partisi.
-
Buat tabel eksternal OSS dan tabel internal MaxCompute menggunakan CREATE TABLE AS.
-- Buat tabel eksternal OSS dan masukkan data ke dalamnya. CREATE EXTERNAL TABLE max_oss_test(a INT, b INT, c INT) STORED AS TEXTFILE LOCATION "oss://oss-cn-hangzhou-internal.aliyuncs.com/<bucket_name>"; INSERT INTO max_oss_test VALUES (101, 1, 20241108), (102, 2, 20241109), (103, 3, 20241110); SELECT * FROM max_oss_test; -- Result a b c 101 1 20241108 102 2 20241109 103 3 20241110 -- Buat tabel internal menggunakan CREATE TABLE AS. CREATE TABLE from_exetbl_oss AS SELECT * FROM max_oss_test; -- Kueri tabel internal baru. SELECT * FROM from_exetbl_oss; -- Hasil menunjukkan bahwa semua data disalin. a b c 101 1 20241108 102 2 20241109 103 3 20241110 -
Jalankan perintah
DESC from_exetbl_oss;untuk melihat skema tabel internal. Perintah mengembalikan output berikut.+------------------------------------------------------------------------------------+ | Owner: ALIYUN$*********** | | Project: ***_*****_*** | | TableComment: | +------------------------------------------------------------------------------------+ | CreateTime: 2023-01-10 15:16:33 | | LastDDLTime: 2023-01-10 15:16:33 | | LastModifiedTime: 2023-01-10 15:16:33 | +------------------------------------------------------------------------------------+ | InternalTable: YES | Size: 919 | +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | Comment | +------------------------------------------------------------------------------------+ | a | string | | | | b | string | | | | c | string | | | +------------------------------------------------------------------------------------+
-
-
Buat tabel internal dengan menyalin skema dari tabel partisi eksternal. Tabel internal menyertakan properti partisi.
-
Buat tabel internal
from_exetbl_likedengan menjalankan kueri terhadap tabel eksternal OSS dari MaxCompute menggunakan perintah CREATE TABLE LIKE.-- Kueri tabel eksternal OSS dari MaxCompute. SELECT * FROM max_oss_test; -- Result a b c 101 1 20241108 102 2 20241109 103 3 20241110 -- Buat tabel internal menggunakan CREATE TABLE LIKE. CREATE TABLE from_exetbl_like LIKE max_oss_test; -- Kueri tabel internal baru. SELECT * FROM from_exetbl_like; -- Result: Hanya skema tabel yang dikembalikan. a b c -
Jalankan perintah
DESC from_exetbl_like;untuk melihat skema tabel internal. Perintah mengembalikan output berikut.+------------------------------------------------------------------------------------+ | Owner: ALIYUN$************ | | Project: ***_*****_*** | | TableComment: | +------------------------------------------------------------------------------------+ | CreateTime: 2023-01-10 15:09:47 | | LastDDLTime: 2023-01-10 15:09:47 | | LastModifiedTime: 2023-01-10 15:09:47 | +------------------------------------------------------------------------------------+ | InternalTable: YES | Size: 0 | +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | Comment | +------------------------------------------------------------------------------------+ | a | string | | | | b | string | | | +------------------------------------------------------------------------------------+ | Partition Columns: | +------------------------------------------------------------------------------------+ | c | string | | +------------------------------------------------------------------------------------+
-
Tabel Delta
-
Buat tabel Delta.
CREATE TABLE mf_tt (pk BIGINT NOT NULL PRIMARY KEY, val BIGINT) TBLPROPERTIES ("transactional"="true"); -
Buat tabel Delta dan atur properti tabel utama.
CREATE TABLE mf_tt2 ( pk BIGINT NOT NULL, pk2 BIGINT NOT NULL, val BIGINT, val2 BIGINT, PRIMARY KEY (pk, pk2) ) TBLPROPERTIES ( "transactional"="true", "write.bucket.num" = "64", "acid.data.retain.hours"="120" ) LIFECYCLE 7;
Metode lain
Ganti tabel yang ada
-
Buat tabel asli
my_tabledan masukkan data ke dalamnya.CREATE OR REPLACE TABLE my_table(a BIGINT); INSERT INTO my_table(a) VALUES (1),(2),(3); -
Gunakan
OR REPLACEuntuk membuat tabel baru dengan nama yang sama dan ubah kolomnya.CREATE OR REPLACE TABLE my_table(b STRING); -
Kueri tabel
my_table. Kueri mengembalikan hasil berikut.+------------+ | b | +------------+ +------------+Pernyataan SQL berikut tidak valid:
CREATE OR REPLACE TABLE IF NOT EXISTS my_table(b STRING); CREATE OR REPLACE TABLE my_table AS SELECT; CREATE OR REPLACE TABLE my_table LIKE newtable;
Salin data dan atur siklus hidup
-- Buat tabel baru bernama sale_detail_ctas1, salin data dari sale_detail ke dalamnya, dan atur siklus hidup.
SET odps.sql.allow.fullscan=true;
CREATE TABLE sale_detail_ctas1 LIFECYCLE 10 AS SELECT * FROM sale_detail;
Jalankan perintah DESC EXTENDED sale_detail_ctas1; untuk melihat detail seperti skema dan siklus hidup tabel.
Dalam contoh ini, sale_detail adalah tabel partisi. Saat Anda menggunakan pernyataan CREATE TABLE ... AS select_statement ... untuk membuat tabel sale_detail_ctas1, properti partisi tidak disalin. Kolom partisi dari tabel sumber menjadi kolom biasa di tabel tujuan. Oleh karena itu, sale_detail_ctas1 adalah tabel non-partisi dengan lima kolom.
Gunakan konstanta untuk nilai kolom
Jika Anda menggunakan konstanta sebagai nilai kolom dalam klausa SELECT, tentukan nama kolomnya. Jika tidak, kolom keempat dan kelima di tabel yang dibuat sale_detail_ctas3 akan menerima nama default seperti _c4 dan _c5.
-
Tentukan nama kolom.
SET odps.sql.allow.fullscan=true; CREATE TABLE sale_detail_ctas2 AS SELECT shop_name, customer_id, total_price, '2013' AS sale_date, 'China' AS region FROM sale_detail; -
Jangan tentukan nama kolom.
SET odps.sql.allow.fullscan=true; CREATE TABLE sale_detail_ctas3 AS SELECT shop_name, customer_id, total_price, '2013', 'China' FROM sale_detail;
Salin skema dan atur siklus hidup
CREATE TABLE sale_detail_like LIKE sale_detail LIFECYCLE 10;
Jalankan perintah DESC EXTENDED sale_detail_like; untuk melihat detail seperti skema dan siklus hidup tabel.
Skema sale_detail_like identik dengan skema sale_detail. Semua properti, seperti nama kolom, komentar kolom, dan komentar tabel, disalin, kecuali properti siklus hidup. Namun, data di sale_detail tidak disalin ke tabel sale_detail_like.
Salin skema dari tabel eksternal
-- Buat tabel baru bernama mc_oss_extable_orc_like yang memiliki skema yang sama seperti tabel eksternal mc_oss_extable_orc.
CREATE TABLE mc_oss_extable_orc_like LIKE mc_oss_extable_orc;
Jalankan perintah DESC mc_oss_extable_orc_like; untuk melihat detail seperti skema tabel.
+------------------------------------------------------------------------------------+
| Owner: ALIYUN$****@***.aliyunid.com | Project: max_compute_7u************yoq |
| TableComment: |
+------------------------------------------------------------------------------------+
| CreateTime: 2022-08-11 11:10:47 |
| LastDDLTime: 2022-08-11 11:10:47 |
| LastModifiedTime: 2022-08-11 11:10:47 |
+------------------------------------------------------------------------------------+
| InternalTable: YES | Size: 0 |
+------------------------------------------------------------------------------------+
| Native Columns: |
+------------------------------------------------------------------------------------+
| Field | Type | Label | Comment |
+------------------------------------------------------------------------------------+
| id | string | | |
| name | string | | |
+------------------------------------------------------------------------------------+
Tipe data baru
SET odps.sql.type.system.odps2=true;
CREATE TABLE test_newtype (
c1 TINYINT,
c2 SMALLINT,
c3 INT,
c4 BIGINT,
c5 FLOAT,
c6 DOUBLE,
c7 DECIMAL,
c8 BINARY,
c9 TIMESTAMP,
c10 ARRAY<MAP<BIGINT,BIGINT>>,
c11 MAP<STRING,ARRAY<BIGINT>>,
c12 STRUCT<s1:STRING,s2:BIGINT>,
c13 VARCHAR(20))
LIFECYCLE 1;
DROP TABLE
Hapus tabel non-partisi atau partisi.
Peringatan
-
Berhati-hatilah saat menghapus tabel. Tabel yang dihapus hanya dapat dipulihkan jika pencadangan dan pemulihan diaktifkan untuk Proyek dan tabel berada dalam periode retensi data. Pemulihan memerlukan konfigurasi cadangan lokal.
-
Menghapus tabel mengurangi penggunaan penyimpanan Proyek MaxCompute.
Sintaks
DROP TABLE [IF EXISTS] <table_name>;
Parameter
|
Parameter |
Required |
Description |
|
IF EXISTS |
No |
Tanpa IF EXISTS, mencoba menghapus tabel yang tidak ada menghasilkan exception. Dengan IF EXISTS, pernyataan berhasil meskipun tabel tidak ada. |
|
table_name |
Yes |
Nama tabel yang akan dihapus. |
Contoh
-- Hapus tabel sale_detail. Pernyataan berhasil terlepas dari apakah tabel ada atau tidak.
DROP TABLE IF EXISTS sale_detail;
Referensi
-
Untuk menyalin data tabel ke tabel lain: CLONE TABLE.
-
Untuk memodifikasi dan melihat informasi tabel: Modifikasi dan lihat tabel.
-
Untuk mengelola partisi tabel yang ada: Operasi partisi.
-
Untuk mengelola kolom tabel yang ada: Operasi kolom.