CREATE TABLE membuat tabel non-partisi, partisi, eksternal, atau terkluster.
Batasan
Tabel partisi dapat memiliki hingga enam level partisi. Misalnya, tabel yang dipartisi berdasarkan tanggal mungkin menggunakan level
year/month/week/day/hour/minute.Secara default, sebuah tabel dapat memiliki hingga 60.000 partisi. Batasan ini dapat dikonfigurasi per Proyek.
Untuk batasan tabel lainnya, lihat Batasan MaxCompute SQL.
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 berikut menunjukkan cara membuat tabel eksternal OSS dengan menggunakan parser data teks bawaan. Untuk informasi selengkapnya, lihat 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
Membuat tabel transaksional. Anda dapat menjalankan operasi UPDATE atau DELETE pada jenis tabel ini. Namun, tabel transaksional memiliki beberapa keterbatasan.
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")];Membuat tabel Delta. Ketika dikombinasikan dengan primary key, Anda dapat melakukan 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 Anda menggunakan subset dari primary key sebagai kunci kluster hash.
Pada tabel Delta dengan primary key, sistem mendistribusikan data menggunakan hash clustering secara default. Kunci kluster default adalah seluruh set kolom primary key. Dalam beberapa skenario bisnis, kueri sering kali menyaring data berdasarkan subset kolom primary key. Untuk skenario tersebut, Anda dapat secara eksplisit menentukan subset dari primary key sebagai kunci kluster. Hal ini memastikan bahwa data didistribusikan dan disimpan berdasarkan subset tersebut, sehingga meningkatkan performa penyaringan.
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 Anda tidak secara eksplisit menentukan kunci kluster, sistem menggunakan seluruh set kolom primary key sebagai kunci kluster default.
Anda tidak dapat mengubah kunci kluster setelah tabel dibuat. Anda harus menentukannya saat membuat tabel.
Klausa CTAS dan LIKE
Membuat tabel baru berdasarkan tabel yang sudah ada dan menyalin datanya tetapi tidak 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>;Membuat tabel baru dengan struktur yang sama seperti tabel yang sudah ada tetapi tidak 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 | Wajib | Deskripsi | Keterangan |
OR REPLACE | Tidak |
| Ini setara dengan menjalankan perintah berikut: |
EXTERNAL | Tidak | Membuat tabel eksternal. | N/A |
IF NOT EXISTS | Tidak | Hanya membuat tabel jika belum ada tabel dengan nama yang sama. | Jika Anda tidak menentukan opsi IF NOT EXISTS dan tabel dengan nama yang sama sudah ada, kesalahan akan dilaporkan. Jika Anda menentukan IF NOT EXISTS, operasi berhasil meskipun tabel dengan nama yang sama sudah ada, bahkan jika skema tabel yang ada tidak sesuai dengan skema tabel yang akan dibuat. Metadata tabel yang ada tidak berubah. |
table_name | Ya | Nama tabel. | Nama tabel harus terdiri dari maksimal 128 byte dan hanya boleh berisi huruf, angka, serta garis bawah (_). Nama tidak peka huruf besar/kecil. Disarankan untuk memulai nama dengan huruf. |
PRIMARY KEY(pk) | Tidak | Primary key tabel. | Anda dapat menentukan satu atau beberapa kolom sebagai primary key. Hal ini memastikan kombinasi nilai dalam kolom-kolom tersebut unik dalam tabel. Sintaks mengikuti sintaks primary key SQL standar. Kolom primary key harus diatur sebagai NOT NULL dan tidak dapat diubah. Penting Parameter ini hanya berlaku untuk Tabel Delta. |
col_name | Ya | Nama kolom. |
|
col_comment | Tidak | Komentar kolom. | Harus berupa string dengan panjang maksimal 1.024 byte. |
data_type | Ya | Tipe data kolom. | Tipe data yang didukung meliputi BIGINT, DOUBLE, BOOLEAN, DATETIME, DECIMAL, dan STRING. Untuk informasi selengkapnya, lihat Tipe data. |
NOT NULL | Tidak | Menentukan bahwa kolom tidak boleh berisi nilai NULL. | Untuk informasi lebih lanjut tentang cara mengubah properti NOT NULL, lihat Operasi partisi. |
default_value | Tidak | Nilai default untuk kolom. | Jika operasi Catatan Fungsi seperti |
table_comment | Tidak | Komentar tabel. | Harus berupa string dengan panjang maksimal 1.024 byte. |
LIFECYCLE | Tidak | Siklus hidup tabel, dalam satuan hari. | Hanya mendukung bilangan bulat positif. Satuannya adalah hari.
|
Tabel partisi
Parameter tabel partisi
Parameter tabel partisi
MaxCompute mendukung dua jenis tabel partisi: standar dan auto-partisi. Anda dapat memilih jenis tabel berdasarkan cara Anda ingin menghasilkan kolom partisi untuk kasus penggunaan Anda. Untuk informasi selengkapnya, lihat Ikhtisar tabel partisi.
Parameter tabel partisi standar
Parameter | Wajib | Deskripsi | Keterangan |
PARTITIONED BY | Ya | Menentukan partisi untuk tabel partisi standar. | Anda dapat menentukan partisi menggunakan PARTITIONED BY atau AUTO PARTITIONED BY, tetapi tidak keduanya sekaligus. |
col_name | Ya | Nama kolom partisi. |
|
data_type | Ya | Tipe data kolom partisi. | MaxCompute V1.0 hanya mendukung tipe STRING. MaxCompute V2.0 mendukung tipe partisi tambahan, termasuk TINYINT, SMALLINT, INT, BIGINT, VARCHAR, dan STRING. Untuk informasi selengkapnya, lihat Tipe data. Saat Anda mempartisi tabel, operasi seperti menambah partisi, memperbarui data, dan membaca data tidak memerlukan pemindaian tabel penuh, sehingga meningkatkan efisiensi. |
col_comment | Tidak | Komentar untuk kolom partisi. | Harus berupa string dengan panjang maksimal 1.024 byte. |
Nilai partisi harus terdiri dari maksimal 255 byte. Nilai tersebut 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 auto-partisi
Kolom partisi untuk tabel auto-partisi dapat dihasilkan secara otomatis. Untuk informasi lebih lanjut tentang cara menggunakan tabel auto-partisi, lihat Jenis tabel partisi.
Parameter | Wajib | Deskripsi | Keterangan |
AUTO PARTITIONED BY | Ya | Menentukan partisi untuk tabel auto-partisi. | Anda dapat menentukan partisi menggunakan PARTITIONED BY atau AUTO PARTITIONED BY, tetapi tidak keduanya sekaligus. |
auto_partition_expression | Ya | Ekspresi yang menentukan cara menghitung kolom partisi. 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 | Tidak | 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 mengubah tipe data atau nilainya. |
TBLPROPERTIES('ingestion_time_partition'='true') | Tidak | Menentukan apakah kolom partisi dihasilkan berdasarkan waktu pemasukan data. | Untuk informasi lebih lanjut tentang pembuatan partisi berdasarkan waktu pemasukan data, lihat Tabel auto-partisi berdasarkan waktu pemasukan data. |
Tabel terkluster
Parameter tabel terkluster
Tabel terkluster dikategorikan menjadi tabel hash-clustered dan tabel range-clustered.
Tabel hash-clustered
Parameter | Wajib | Deskripsi | Keterangan |
CLUSTERED BY | Ya | Menentukan kunci hash. MaxCompute menghitung nilai hash untuk kolom yang ditentukan dan mendistribusikan data ke dalam bucket hash berdasarkan nilai-nilai tersebut. | MaxCompute melakukan operasi hash pada kolom yang ditentukan dan mendistribusikan data ke dalam bucket berdasarkan nilai hash. Untuk mencegah kesenjangan data dan hotspots serta mencapai performa eksekusi paralel yang baik, pilih kolom yang memiliki rentang nilai luas dan sedikit kunci duplikat untuk klausa |
SORTED BY | Ya | 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 | Ya | Menentukan jumlah bucket hash. | Nilai ini wajib dan bergantung pada volume data. Secara default, MaxCompute mendukung maksimal 1.111 reducer, yang membatasi jumlah bucket hash hingga 1.111. Anda dapat menjalankan perintah |
Saat memilih jumlah bucket hash, ikuti dua prinsip berikut:
Pertahankan ukuran bucket hash yang moderat: Ukuran yang direkomendasikan untuk setiap bucket hash adalah sekitar 500 MB. Misalnya, jika perkiraan ukuran partisi adalah 500 GB, atur jumlah bucket menjadi 1.000. Ini menghasilkan ukuran rata-rata bucket hash sekitar 500 MB. Untuk tabel yang sangat besar, Anda dapat melebihi batas 500 MB. Ukuran 2 GB hingga 3 GB per bucket cocok. Anda juga dapat menjalankan perintah
set odps.stage.reducer.num=<concurrency>;untuk melebihi batas 1.111 bucket hash.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 dua (2n), seperti 512, 1.024, 2.048, atau 4.096. Hal ini memungkinkan sistem secara otomatis membagi atau menggabungkan bucket hash dan menghilangkan langkah shuffle dan sort, sehingga meningkatkan efisiensi eksekusi.
Tabel range-clustered
Parameter | Wajib | Deskripsi | Keterangan |
RANGE CLUSTERED BY | Ya | Menentukan kolom range-cluster. | MaxCompute melakukan operasi bucketing pada kolom yang ditentukan dan mendistribusikan data ke dalam bucket berdasarkan nomor bucket. |
SORTED BY | Ya | Menentukan urutan pengurutan kolom dalam setiap bucket. | Penggunaannya sama seperti pada tabel hash-clustered. |
number_of_buckets | Ya | Menentukan jumlah bucket. | Untuk tabel range-clustered, praktik terbaik menggunakan pangkat dua (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 grup merupakan kunci range clustering atau awalannya, Anda dapat menghilangkan redistribusi data (shuffle remove) untuk meningkatkan performa. Anda dapat menjalankan perintah set odps.optimizer.enable.range.partial.repartitioning=true/false; untuk mengaktifkan atau menonaktifkan fitur ini. Fitur ini dinonaktifkan secara default.
Manfaat tabel terkluster:
Pemangkasan bucket yang dioptimalkan
Agregasi yang dioptimalkan
Penyimpanan yang dioptimalkan
Keterbatasan tabel terkluster:
INSERT INTOtidak didukung. Anda hanya dapat menambahkan data dengan menggunakanINSERT OVERWRITE.Mengunggah data langsung ke tabel range-clustered menggunakan Tunnel tidak didukung karena Tunnel mengunggah data secara tidak terurut.
Fitur backup dan pemulihan tidak didukung.
Tabel eksternal
Parameter tabel eksternal
Bagian ini menggunakan parameter untuk membuat tabel eksternal OSS sebagai contoh. Untuk informasi lebih lanjut tentang parameter untuk membuat jenis tabel eksternal lainnya, lihat Tabel eksternal.
Parameter | Wajib | Deskripsi |
| Ya | Menentukan file_format berdasarkan format data tabel eksternal. |
| Tidak | Menentukan parameter terkait otorisasi, kompresi, dan parsing karakter untuk tabel eksternal. |
oss_location | Ya | Lokasi penyimpanan OSS untuk data tabel eksternal. Untuk informasi selengkapnya, lihat Tabel eksternal OSS. |
Tabel transaksional dan 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 | Wajib | Deskripsi | Keterangan |
PRIMARY KEY(PK) | Ya | Menentukan primary key untuk Tabel Delta, yang dapat mencakup beberapa kolom. | Sintaks mengikuti sintaks primary key SQL standar. Kolom primary key harus diatur sebagai NOT NULL dan tidak dapat diubah. Setelah primary key ditentukan, data akan di-deduplicate berdasarkan kolom primary key. Kendala unik diberlakukan dalam satu partisi atau dalam tabel non-partisi. |
transactional | Ya | 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 | Tidak | 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 mengubah parameter ini untuk tabel partisi, dan pengaturan baru berlaku untuk partisi baru. Anda tidak dapat mengubah parameter ini untuk tabel non-partisi. Pertimbangkan rekomendasi berikut:
|
acid.data.retain.hours | Tidak | 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 | Tidak | Nilai default: | Jika |
acid.write.precombine.field | Tidak | 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 | Tidak | Jika diatur ke | Parameter ini diatur saat Anda membuat tabel. Parameter ini tidak dapat diubah 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 kesalahan akan dilaporkan jika kondisi ini tidak terpenuhi.Fitur yang tidak didukung:
CLUSTERED BY,EXTERNAL, danCREATE TABLE AStidak didukung.
Keterbatasan lain:
Saat ini, engine lain tidak dapat langsung beroperasi pada Tabel Delta. Hanya MaxCompute SQL yang didukung.
Anda tidak dapat mengonversi tabel standar menjadi Tabel Delta.
Anda tidak dapat melakukan perubahan skema pada kolom primary key Tabel Delta.
Parameter Tabel Transaksional
Parameter | Wajib | Deskripsi |
TBLPROPERTIES("transactional"="true") | Ya | Menetapkan tabel sebagai Tabel Transaksional. Anda kemudian dapat melakukan operasi |
Keterbatasan berikut berlaku untuk Tabel Transaksional:
Anda hanya dapat mengatur properti
transactionalsaat membuat tabel. Anda tidak dapat menggunakanALTER TABLEuntuk mengubah properti ini pada tabel yang sudah ada. Pernyataan berikut mengembalikan kesalahan:ALTER TABLE not_txn_tbl SET TBLPROPERTIES("transactional"="true"); -- Error returned. FAILED: Catalog Service Failed, ErrorCode: 151, Error Message: Set transactional is not supportedAnda tidak dapat menetapkan tabel terkluster atau tabel eksternal sebagai Tabel Transaksional.
Anda tidak dapat mengonversi tabel internal standar, tabel eksternal, atau tabel terkluster menjadi Tabel Transaksional, atau sebaliknya.
Pemadatan otomatis file dalam Tabel Transaksional tidak didukung. Anda harus melakukan operasi ini secara manual. Untuk informasi selengkapnya, lihat 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, cadangkan secara manual ke tabel lain menggunakan pernyataanSELECT...INSERT.
Buat tabel dari tabel yang sudah ada
Buat tabel (dari yang sudah ada)
Anda dapat menggunakan pernyataan
CREATE TABLE [IF NOT EXISTS] <table_name> [LIFECYCLE <days>] AS <select_statement>;untuk membuat tabel lain dan sekaligus menyalin data ke tabel baru tersebut.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 untuk tabel baru. Pernyataan ini juga mendukung pembuatan tabel internal dan penyalinan data dari tabel eksternal.
Anda dapat menggunakan 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 sudah ada.Pernyataan ini menyalin skema tetapi tidak menyalin data atau properti lifecycle dari tabel sumber.
Anda dapat menggunakan parameter lifecycle untuk menentukan siklus hidup untuk tabel baru. Pernyataan ini juga mendukung pembuatan tabel internal yang menyalin skema 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 non-partisi hash-clustered.
CREATE TABLE t1 (a STRING, b STRING, c BIGINT) CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets;Buat tabel partisi hash-clustered.
CREATE TABLE t2 (a STRING, b STRING, c BIGINT) PARTITIONED BY (dt STRING) CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets;Buat tabel non-partisi range-clustered.
CREATE TABLE t3 (a STRING, b STRING, c BIGINT) RANGE CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets;Buat tabel partisi range-clustered.
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. Buat tabel internal 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 20241110Jalankan 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_like. Kueri tabel eksternal OSS dari MaxCompute. Buat tabel internal menggunakan 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 cJalankan 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 sudah 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 kolom. 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 dengan 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;Perintah terkait
ALTER TABLE: Memodifikasi struktur atau properti tabel.
TRUNCATE: Menghapus semua data dari tabel.
DROP TABLE: Menghapus tabel.
DESC TABLE/VIEW: Menampilkan informasi tentang tabel internal MaxCompute, Tampilan, Tampilan yang di-materialisasi, tabel eksternal, tabel terkluster, atau tabel Transaksional.
SHOW: Menampilkan pernyataan SQL DDL untuk tabel, semua tabel dan Tampilan dalam Proyek, atau semua partisi dalam tabel.