Pelajari cara menggunakan perintah untuk membuat dan menghapus tabel di MaxCompute.
Type | Description | Required permission | Execution tools |
Membuat tabel non-partisi, partisi, eksternal, atau terkluster. | Memerlukan izin CreateTable pada Proyek. | Anda dapat menjalankan perintah ini di alat berikut: | |
Menghapus tabel partisi atau non-partisi. | Memerlukan izin Drop pada tabel. |
Membuat tabel
Anda dapat membuat 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 proyek, dengan nilai default 60.000.
Untuk informasi lebih lanjut tentang batasan tabel, lihat Batasan SQL MaxCompute.
Sintaks
Tabel internal
Membuat 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
Membuat 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
Membuat tabel eksternal
Contoh berikut menunjukkan cara membuat tabel eksternal OSS menggunakan parser data teks bawaan. Untuk informasi lebih lanjut, 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 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")];Membuat tabel Delta. Ketika digabungkan dengan kunci primer, 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 kunci primer memungkinkan Anda menggunakan subset dari kunci primer sebagai kunci kluster hash.
Pada tabel Delta dengan kunci primer, sistem mendistribusikan data menggunakan pengelompokan hash secara default. Kunci kluster default adalah seluruh set kolom kunci primer. Dalam beberapa skenario bisnis, kueri sering kali menyaring data menggunakan subset kolom kunci primer. Untuk skenario tersebut, Anda dapat secara eksplisit menentukan subset kunci primer sebagai kunci kluster. Hal ini memastikan bahwa data didistribusikan dan disimpan berdasarkan subset tersebut, yang 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 kunci primer.
Jika Anda tidak secara eksplisit menentukan kunci kluster, sistem menggunakan seluruh set kolom kunci primer 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 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 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 | 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. | 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 | Yes | Nama tabel. | Nama tabel harus terdiri dari maksimal 128 byte dan hanya boleh berisi huruf, angka, serta garis bawah (_). Nama bersifat case-insensitive. Disarankan untuk memulai nama dengan huruf. |
PRIMARY KEY(pk) | No | Kunci primer tabel. | Anda dapat menentukan satu atau beberapa kolom sebagai kunci primer. Hal ini memastikan kombinasi nilai dalam kolom-kolom tersebut unik dalam tabel. Sintaks mengikuti sintaks kunci primer SQL standar. Kolom kunci primer harus diatur sebagai NOT NULL dan tidak dapat diubah. Penting Parameter ini hanya berlaku untuk Tabel Delta. |
col_name | Yes | Nama kolom. |
|
col_comment | No | Komentar kolom. | Harus berupa string dengan panjang maksimal 1.024 byte. |
data_type | Yes | Tipe data kolom. | Tipe data yang didukung meliputi BIGINT, DOUBLE, BOOLEAN, DATETIME, DECIMAL, dan STRING. Untuk informasi lebih lanjut, lihat Tipe data. |
NOT NULL | No | Menentukan bahwa kolom tidak boleh berisi nilai NULL. | Untuk informasi lebih lanjut tentang cara mengubah 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 dengan panjang maksimal 1.024 byte. |
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 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 lebih lanjut, 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 tipe STRING. MaxCompute V2.0 mendukung tipe partisi tambahan, termasuk TINYINT, SMALLINT, INT, BIGINT, VARCHAR, dan STRING. Untuk informasi lebih lanjut, 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 | No | 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 | Required | Description | Remarks |
AUTO PARTITIONED BY | Yes | Menentukan partisi untuk tabel auto-partisi. | Anda dapat menentukan partisi menggunakan PARTITIONED BY atau AUTO PARTITIONED BY, tetapi tidak keduanya sekaligus. |
auto_partition_expression | Yes | Ekspresi yang mendefinisikan 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 satuan 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 mengubah tipe data atau nilainya. |
TBLPROPERTIES('ingestion_time_partition'='true') | No | Menentukan apakah kolom partisi dihasilkan berdasarkan waktu pemasukan data. | Untuk informasi lebih lanjut tentang menghasilkan partisi berdasarkan waktu pemasukan data, lihat Tabel auto-partisi 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. | 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 | 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. 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 di kedua tabel merupakan kelipatan satu sama lain, misalnya 256 dan 512. Mengatur jumlah bucket hash menjadi pangkat 2 (2n), seperti 512, 1024, 2048, atau 4096, direkomendasikan. Hal ini memungkinkan sistem secara otomatis membagi atau menggabungkan bucket hash dan menghilangkan langkah shuffle dan sort, yang 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 pangkat-2 (2n) yang berlaku untuk tabel hash-clustered tidak diperlukan. Jumlah bucket apa pun dapat diterima jika 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 pengelompokan range 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
Batasan tabel terkluster:
INSERT INTOtidak didukung. Anda hanya dapat menambahkan data menggunakanINSERT OVERWRITE.Mengunggah data langsung ke tabel range-clustered menggunakan Tunnel tidak didukung karena Tunnel mengunggah data secara tidak terurut.
Fitur pencadangan dan pemulihan tidak didukung.
Parameter 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 | 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 kunci primer yang didukung.
Parameter | Required | Description | Remarks |
PRIMARY KEY(PK) | Yes | Menentukan kunci primer untuk Tabel Delta, yang dapat mencakup beberapa kolom. | Sintaks mengikuti sintaks kunci primer SQL standar. Kolom kunci primer harus diatur sebagai NOT NULL dan tidak dapat diubah. Setelah kunci primer ditetapkan, data dideduplikasi berdasarkan kolom kunci primer. 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 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 | 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 kunci primer untuk mendeduplikasi data dalam commit yang sama. Hal ini memastikan keunikan dan konsistensi data. Catatan Jika satu commit data melebihi 128 MB, beberapa file dihasilkan. Parameter ini tidak berlaku lintas beberapa file. |
acid.partial.fields.update.enable | No | Jika diatur ke | Parameter ini ditentukan 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 atau sama dengan periode retensi time travel, yaitu
lifecycle >= acid.data.retain.hours / 24. Pemeriksaan dilakukan saat tabel dibuat, dan kesalahan dilaporkan jika kondisi ini tidak terpenuhi.Fitur yang tidak didukung:
CLUSTERED BY,EXTERNAL, danCREATE TABLE AStidak didukung.
Batasan lain:
Saat ini, mesin 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 kunci primer Tabel Delta.
Parameter Tabel Transaksional
Parameter | Required | Description |
TBLPROPERTIES("transactional"="true") | Yes | Menetapkan tabel sebagai Tabel Transaksional. Anda kemudian dapat melakukan operasi |
Batasan 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"); -- Kesalahan dikembalikan. 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.
Kompaksi otomatis file dalam Tabel Transaksional tidak didukung. Anda harus melakukan operasi ini secara manual. Untuk informasi lebih lanjut, lihat Kompaksi 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.
Membuat tabel (dari yang sudah ada)
Membuat 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 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
Membuat tabel non-partisi.
CREATE TABLE test1 (key STRING);Membuat tabel non-partisi dan menentukan 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
Membuat 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);Membuat 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, dan kemudian 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
Membuat tabel hash-clustered non-partisi.
CREATE TABLE t1 (a STRING, b STRING, c BIGINT) CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets;Membuat 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;Membuat tabel range-clustered non-partisi.
CREATE TABLE t3 (a STRING, b STRING, c BIGINT) RANGE CLUSTERED BY (c) SORTED BY (c) INTO 1024 buckets;Membuat 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
Membuat tabel transaksional non-partisi.
CREATE TABLE t5(id BIGINT) TBLPROPERTIES ("transactional"="true");Membuat tabel transaksional partisi.
CREATE TABLE IF NOT EXISTS t6(id BIGINT) PARTITIONED BY (ds STRING) TBLPROPERTIES ("transactional"="true");
Tabel internal
Membuat tabel internal dengan menyalin data dari tabel partisi eksternal. Tabel internal tidak akan mencakup properti partisi.
Membuat tabel eksternal OSS dan tabel internal MaxCompute. Buat tabel internal menggunakan CREATE TABLE AS.
-- Membuat tabel eksternal OSS dan memasukkan 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; -- Hasil a b c 101 1 20241108 102 2 20241109 103 3 20241110 -- Membuat tabel internal menggunakan CREATE TABLE AS. CREATE TABLE from_exetbl_oss AS SELECT * FROM max_oss_test; -- Mengkueri 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 | | | +------------------------------------------------------------------------------------+
Membuat tabel internal dengan menyalin skema dari tabel partisi eksternal. Tabel internal mencakup properti partisi.
Buat tabel internal
from_exetbl_like. Kueri tabel eksternal OSS dari MaxCompute. Buat tabel internal menggunakan CREATE TABLE LIKE.-- Mengkueri tabel eksternal OSS dari MaxCompute. SELECT * FROM max_oss_test; -- Hasil a b c 101 1 20241108 102 2 20241109 103 3 20241110 -- Membuat tabel internal menggunakan CREATE TABLE LIKE. CREATE TABLE from_exetbl_like LIKE max_oss_test; -- Mengkueri tabel internal baru. SELECT * FROM from_exetbl_like; -- Hasil: 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
Membuat Tabel Delta.
CREATE TABLE mf_tt (pk BIGINT NOT NULL PRIMARY KEY, val BIGINT) TBLPROPERTIES ("transactional"="true");Membuat Tabel Delta dan mengatur 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
Mengganti 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 mengubah 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;
Menyalin data dan mengatur siklus hidup
-- Membuat tabel baru bernama sale_detail_ctas1, menyalin data dari sale_detail ke dalamnya, dan mengatur 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.
Menggunakan 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;
Menyalin skema dan mengatur 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.
Menyalin skema dari tabel eksternal
-- Membuat 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
Menghapus tabel non-partisi atau tabel partisi.
Peringatan
Berhati-hatilah saat menghapus tabel. Anda hanya dapat memulihkan tabel yang dihapus jika fitur pencadangan dan pemulihan diaktifkan untuk proyek tersebut dan tabel masih berada dalam periode retensi data yang dikonfigurasi. Untuk informasi lebih lanjut, lihat 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 akan mengembalikan exception. Dengan IF EXISTS, pernyataan berhasil meskipun tabel tidak ada. |
table_name | Yes | Nama tabel yang akan dihapus. |
Contoh
-- Menghapus 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, lihat CLONE TABLE.
Untuk memodifikasi dan melihat informasi tabel, lihat Memodifikasi dan melihat tabel.
Untuk mengelola partisi tabel yang ada, lihat Operasi partisi.
Untuk mengelola kolom tabel yang ada, lihat Operasi kolom.