Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:
Databricks SQL
Databricks Runtime
Menentukan tabel terkelola atau eksternal , dengan opsi menggunakan sumber data.
Sintaks
{ { [CREATE OR] REPLACE TABLE | CREATE [EXTERNAL | { TEMP | TEMPORARY } ] TABLE [ IF NOT EXISTS ] }
table_name
[ table_specification ]
[ USING data_source ]
[ table_clauses ]
[ AS query ] }
table_specification
( { column_identifier column_type [ column_properties ] } [, ...]
[ , table_constraint ] [...] )
column_properties
{ NOT NULL |
COLLATE collation_name |
GENERATED ALWAYS AS ( expr ) |
GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( [ START WITH start | INCREMENT BY step ] [ ...] ) ] |
DEFAULT default_expression |
COMMENT column_comment |
column_constraint |
MASK clause } [ ... ]
table_clauses
{ OPTIONS clause |
PARTITIONED BY clause |
CLUSTER BY clause |
clustered_by_clause |
LOCATION path [ WITH ( CREDENTIAL credential_name ) ] |
COMMENT table_comment |
TBLPROPERTIES clause |
DEFAULT COLLATION default_collation_name |
WITH { ROW FILTER clause } } [...]
clustered_by_clause
{ CLUSTERED BY ( cluster_column [, ...] )
[ SORTED BY ( { sort_column [ ASC | DESC ] } [, ...] ) ]
INTO num_buckets BUCKETS }
Sebelum Databricks Runtime 16.1 START WITH harus mendahului INCREMENT BY.
Parameter
MENGGANTI
Jika ditentukan, mengganti tabel dan kontennya jika sudah ada. Klausa ini hanya didukung untuk tabel Delta dan Apache Iceberg.
REPLACEmempertahankan riwayat tabel dan hak istimewa yang diberikan, filter baris, dan masker kolom.Catatan
Azure Databricks sangat merekomendasikan penggunaan
REPLACEalih-alih menghilangkan dan membuat ulang tabel.EKSTERNAL
Jika ditentukan, membuat tabel eksternal. Saat membuat tabel eksternal, Anda juga harus memberikan klausa
LOCATION. Ketika tabel eksternal dihilangkan, file diLOCATIONtidak akan dihilangkan.TEMP atau SEMENTARA
Berlaku untuk:
pemeriksaan Databricks SQL
Databricks Runtime 17.3 ke atasPenting
Fitur ini ada di Pratinjau Umum.
Jika ditentukan, membuat tabel sementara yang hanya dapat diakses sesi saat ini.
JIKA TIDAK ADA
Jika ditentukan dan tabel dengan nama yang sama sudah ada, pernyataan diabaikan.
IF NOT EXISTStidak dapat hidup berdampingan denganREPLACE, yang berartiCREATE OR REPLACE TABLE IF NOT EXISTStidak diperbolehkan.-
Nama tabel yang akan dibuat. Nama tidak boleh menyertakan spesifikasi temporal atau spesifikasi opsi. Jika tabel adalah tabel sementara
table_namedapat ditentukan olehsession, atausystem.session. Jika tidak, jika nama tidak memenuhi syarat, tabel dibuat dalam skema saat ini.Tabel yang dibuat dalam
hive_metastorehanya dapat berisi karakter dan garis bawah ASCII alfanumerik (INVALID_SCHEMA_OR_RELATION_NAME).Tabel Iceberg harus dibuat di Katalog Unity. Membuat tabel Iceberg di
hive_metastoretidak didukung. spesifikasi_tabel
Klausa opsional ini menentukan daftar kolom, jenis, properti, deskripsi, dan batasan kolomnya.
Jika Anda tidak menentukan kolom skema tabel, Anda harus menentukan
AS queryatauLOCATION.-
Nama unik untuk kolom.
Pengidentifikasi kolom tabel Delta tanpa properti pemetaan kolom (
'delta.columnMapping.mode' = 'name') tidak boleh berisi spasi atau karakter berikut:, ; { } ( ) \n \t =.Pengidentifikasi
AVROkolom tabel harus dimulai dengan garis bawah (_) atau huruf Unicode (termasuk huruf non-ASCII) dan diikuti dengan kombinasi huruf, digit, dan garis bawah Unicode.Pengidentifikasi
ICEBERGkolom tabel harus unik, tidak peka huruf besar/kecil, dan mengikuti aturan pengidentifikasi SQL standar. Hindari menggunakan spasi atau karakter khusus, karena mungkin tidak didukung oleh semua mesin kueri. -
Menentukan tipe data kolom. Tidak semua tipe data yang didukung oleh Azure Databricks didukung oleh semua sumber data.
BUKAN NULL
Jika ditentukan, kolom tidak akan menerima nilai
NULL. Klausa ini hanya didukung untuk tabel Delta dan Iceberg.MENYUSUN collation_name
Berlaku untuk:
Databricks SQL
Databricks Runtime 16.1 ke atasUntuk
STRINGcolumn_typedapat secara opsional menentukan pengaturan urutan yang akan diterapkan untuk operasi perbandingan dan pengurutan pada kolom ini. Pengurutan default adalah tabeldefault_collation_name.DIHASILKAN SELALU SEBAGAI ( expr )
Ketika Anda menentukan klausa ini, nilai kolom ini ditentukan oleh
expryang ditentukan .DEFAULT COLLATIONdi tabel harusUTF8_BINARY.exprdapat terdiri dari literal, pengidentifikasi kolom dalam tabel, dan fungsi atau operator SQL bawaan deterministik kecuali:- Fungsi agregat
- fungsi jendela analitik
- fungsi jendela peringkat
- Fungsi generator bernilai tabel
- Kolom dengan kolasi selain
UTF8_BINARY
Juga
exprtidak boleh berisi subkueri apa pun.DIHASILKAN { SELALU | SECARA BAWAAN } SEBAGAI IDENTITAS [ ( [ MULAI DENGAN mulai ] [ DITAMBAH DENGAN langkah ] ) ]
Berlaku untuk:
Databricks SQL
Databricks Runtime 10.4 LTS ke atasMenentukan kolom identitas. Saat Anda menulis ke tabel dan tidak memberikan nilai untuk kolom identitas, kolom tersebut akan secara otomatis diberi nilai yang unik dan bertambah secara statistik (atau berkurang jika
stepnegatif). Klausa ini hanya didukung untuk tabel Delta. Klausa ini hanya dapat digunakan untuk kolom dengan jenis data BIGINT.Nilai yang ditetapkan secara otomatis dimulai dengan
startdan meningkat sesuai denganstep. Nilai yang ditetapkan unik tetapi tidak dijamin berurutan. Kedua parameter bersifat opsional, dan nilai defaultnya adalah 1.steptidak bisa menjadi0.Jika nilai yang ditetapkan secara otomatis berada di luar rentang tipe kolom identitas, kueri akan gagal.
Saat
ALWAYSdigunakan, Anda tidak dapat memberikan nilai Anda sendiri untuk kolom identitas.Operasi berikut tidak didukung:
-
PARTITIONED BYkolom identitas -
UPDATEkolom identitas
Catatan
Mendeklarasikan kolom identitas pada tabel menonaktifkan transaksi bersamaan. Hanya gunakan kolom identitas dalam kasus penggunaan di mana penulisan bersamaan ke tabel target tidak diperlukan.
-
default_expression DEFAULT
Berlaku untuk:
Databricks SQL
Databricks Runtime 11.3 LTS ke atasMenentukan nilai
DEFAULTuntuk kolom yang digunakan padaINSERT,UPDATE, danMERGE ... INSERTsaat kolom tidak ditentukan.Jika tidak ada default yang dibuat,
DEFAULT NULLditerapkan untuk kolom yang dapat bernilai null.default_expressiondapat terdiri dari fungsi atau operator SQL literal dan bawaan kecuali:- Fungsi agregat
- fungsi jendela analitik
- fungsi jendela peringkat
- Fungsi generator bernilai tabel
Juga
default_expressiontidak boleh berisi subkueri apa pun.DEFAULTdidukung untuk sumberCSV,JSON,PARQUET, danORC.KOMENTAR column_comment
String harfiah untuk menjelaskan kolom.
-
Menambahkan kunci primer atau batasan kunci asing ke kolom dalam tabel.
Batasan tidak didukung untuk tabel di katalog
hive_metastore.Untuk menambahkan batasan pemeriksaan ke tabel, gunakan ALTER TABLE.
-
Berlaku untuk:
Databricks SQL
Databricks Runtime 12.2 LTS ke atas
Unity Catalog sajaMenambahkan fungsi masker kolom untuk menganonimkan data sensitif. Semua kueri berikutnya dari kolom tersebut menerima hasil evaluasi fungsi tersebut di atas kolom sebagai pengganti nilai asli kolom. Ini dapat berguna untuk tujuan kontrol akses tingkat halus di mana fungsi dapat memeriksa identitas atau keanggotaan grup dari pengguna yang memanggil untuk memutuskan apakah akan menyunting nilai.
Jika Anda mengganti tabel dan tabel baru menyertakan nama kolom yang sama dengan aslinya, masker kolom yang ada dipertahankan, meskipun tidak secara eksplisit didefinisikan ulang. Ini mencegah hilangnya kebijakan akses data yang tidak disengaja.
-
Menambahkan batasan kunci primer informatif atau kunci asing informatif ke tabel.
Batasan kunci tidak didukung untuk tabel di katalog
hive_metastore.Untuk menambahkan batasan pemeriksaan ke tabel, gunakan ALTER TABLE.
-
MENGGUNAKAN data_source
data_sourcedapat berupa format file atau sumber data JDBC federasi.Format file harus salah satu dari berikut ini:
AVROBINARYFILECSVDELTAICEBERGJSONORCPARQUETTEXT
Untuk format file apa pun selain
DELTAatauICEBERG, Anda juga harus menentukanLOCATION, kecuali katalog tabel adalahhive_metastore.Sumber JDBC federasi berikut didukung:
POSTGRESQLSQLSERVERMYSQLBIGQUERYNETSUITEORACLEREDSHIFTSNOWFLAKESQLDWSYNAPSESALESFORCESALESFORCE_DATA_CLOUDTERADATAWORKDAY_RAASMONGODB
Saat menentukan sumber JDBC federasi, Anda juga harus menentukan
OPTIONSklausul dengan informasi koneksi yang diperlukan. Lihat Database kueri menggunakan JDBC untuk informasi selengkapnya tentang mengkueri sumber data federasi.Format file tambahan berikut yang akan digunakan untuk tabel didukung dalam Databricks Runtime:
JDBCLIBSVM- nama kelas yang memenuhi persyaratan sepenuhnya dari implementasi kustom
org.apache.spark.sql.sources.DataSourceRegister.
Jika
USINGdihilangkan, defaultnya adalahDELTA.Berikut ini berlaku untuk: Databricks Runtime
HIVEmendukung pembuatan tabel Hive SerDe di Databricks Runtime. Anda dapat menentukanfile_formatdanrow_formatmenggunakanOPTIONSklausul, yang merupakan peta string yang tidak peka terhadap huruf besar dan kecil.option_keysadalah:FILEFORMATINPUTFORMATOUTPUTFORMATSERDEFIELDDELIMESCAPEDELIMMAPKEYDELIMLINEDELIM
table_clauses
Secara opsional tentukan lokasi, partisi, pengklusteran, opsi, komentar, dan properti yang ditentukan pengguna untuk tabel baru. Setiap sub klausul hanya dapat ditentukan satu kali.
-
Klausa opsional untuk mempartisi tabel menurut subset kolom.
Catatan
Untuk tabel Iceberg terkelola, Azure Databricks tidak mendukung
PARTITIONED BY. Gunakan pengklusteran cair (CLUSTER BY) untuk mengoptimalkan tata letak data sebagai gantinya. Untuk tabel Delta, jika Anda menghilangkan definisi tabel, Azure Databricks menempatkan kolom partisi di akhir tabel, bahkan jika Anda mencantumkannya sebelumnya dalam spesifikasi kolom. -
Berlaku untuk:
Databricks SQL
Databricks Runtime 13.3 ke atasKlausa opsional untuk mengkluster tabel Delta atau Iceberg dengan subset kolom. Lihat Menggunakan pengklusteran cair untuk tabel. Untuk mengkluster tabel lain, gunakan
clustered_by_clause.Untuk tabel Iceberg, Anda harus secara eksplisit menonaktifkan vektor penghapusan dan ID baris saat Anda menggunakan
CLUSTER BY.Gunakan pengklusteran cairan otomatis dengan
CLUSTER BY AUTO, dan Databricks dengan cerdas memilih kunci pengklusteran untuk mengoptimalkan performa kueri.Anda tidak dapat menggabungkan pengklusteran cairan dengan
PARTITIONED BY. klause_berkelompok_oleh
Secara opsional, kelompokkan tabel atau setiap partisi menjadi sejumlah wadah hash tetap dengan menggunakan beberapa kolom tertentu.
Klausa ini tidak didukung untuk tabel Delta atau Iceberg. Gunakan
CLUSTER BYsebagai gantinya.DIKKLUSTERKAN OLEH
Menentukan kumpulan kolom untuk mengelompokkan setiap partisi, atau tabel jika tidak ada partisi yang ditentukan.
-
Pengidentifikasi yang merujuk pada
column_identifierdalam tabel. Jika Anda menentukan lebih dari satu kolom, tidak boleh ada duplikat. Karena pengklusteran beroperasi pada tingkat partisi, Anda tidak boleh memberi nama kolom partisi juga sebagai kolom kluster.
-
DIURUTKAN MENURUT
Opsional mempertahankan urutan pengurutan untuk baris dalam buket.
sort_column
Kolom untuk mengurutkan wadah berdasarkan kriteria tertentu. Kolom tidak boleh berupa kolom partisi. Kolom pengurutan harus unik.
ASC atau DESC
Secara opsional menentukan apakah
sort_columndiurutkan dalam urutan naik (ASC) atau turun (DESC). Nilai defaultnya adalahASC.
MENJADI num_buckets KERANJANG
Literal INTEGER yang menentukan jumlah keranjang di mana setiap partisi (atau tabel jika tidak ada partisi yang ditentukan) dibagi.
jalur LOKASI [ DENGAN ( KREDENSIAL credential_name ) ]
Jalur opsional ke direktori tempat data tabel disimpan, yang bisa menjadi jalur pada penyimpanan terdistribusi.
pathharus berupa literal string. Jika Anda menentukan tidak ada lokasi tabel yang dianggap sebagaimanaged tabledan Azure Databricks membuat lokasi tabel default.Menentukan lokasi menjadikan tabel sebagai tabel eksternal.
Untuk tabel yang tidak berada di katalog
hive_metastore, tabelpathharus dilindungi oleh lokasi eksternal kecuali kredensial penyimpanan valid ditentukan.Anda tidak dapat membuat tabel eksternal di lokasi yang tumpang tindih dengan lokasi tabel terkelola .
Untuk tabel Delta, tabel mewarisi konfigurasinya dari
LOCATIONjika data sudah ada di jalur tersebut. Akibatnya, klausaTBLPROPERTIES,table_specification, atauPARTITIONED BYyang ditentukan harus sama persis dengan data yang ada di lokasi Delta.Untuk tabel Iceberg,
LOCATIONklausul tidak didukung. Tabel Iceberg asing didaftarkan secara otomatis ketika Anda membuat katalog asing, dan Anda harus membuat tabel Iceberg terkelola tanpa menentukan lokasi.-
Mengatur atau mengatur ulang satu atau beberapa opsi tabel yang ditentukan pengguna.
KOMENTAR table_comment
Sebuah string literal untuk menggambarkan tabel.
-
Secara opsional, atur satu atau beberapa properti yang ditentukan pengguna.
KOLASI DEFAULT default_collation_name
Berlaku untuk:
Databricks SQL
Databricks Runtime 16.3 ke atasMenentukan kolatasi default yang akan digunakan untuk:
-
STRINGkolom dan bidang tabel - ekspresi
DEFAULT - Badan
CREATE TABLE AS query
CHECKbatasan dan ekspresi kolom yang dihasilkan memerlukan kolasi defaultUTF8_BINARY.Jika tidak ditentukan, kolaborasi default berasal dari skema tempat tabel dibuat.
-
DENGAN ROW FILTER klausa
Berlaku untuk:
Databricks SQL
Databricks Runtime 12.2 LTS ke atas
Unity Catalog sajaMenambahkan fungsi filter baris ke tabel. Semua kueri berikutnya dari tabel tersebut akan menerima subset baris di mana fungsi dievaluasi menjadi boolean TRUE. Hal ini dapat berguna untuk tujuan kontrol akses menurun di mana fungsi dapat memeriksa identitas atau keanggotaan grup pengguna yang memanggil untuk memutuskan apakah akan memfilter baris tertentu.
Jika Anda mengganti tabel, filter baris yang ada akan dipertahankan, meskipun tidak secara eksplisit didefinisikan ulang. Ini mencegah hilangnya kebijakan akses data yang tidak disengaja.
-
AS kueri
Klausa opsional ini mengisi tabel menggunakan data dari
query. Ketika Anda menentukanquery, Anda juga tidak harus menentukantable_specification. Skema tabel berasal dari kueri.Perhatikan bahwa Azure Databricks menimpa sumber data asli dengan data dari kueri input, untuk memastikan tabel yang dibuat mengandung data yang sama persis dengan kueri input.
Contoh
-- Creates a Delta table
> CREATE TABLE student (id INT, name STRING, age INT);
-- Creates a managed Iceberg table
> CREATE TABLE edu.enrollment.student (id INT, name STRING, age INT) USING ICEBERG;
-- Use data from another table
> CREATE TABLE student_copy AS SELECT * FROM student;
-- Creates a CSV table from an external directory
> CREATE TABLE student USING CSV LOCATION '/path/to/csv_files';
-- Specify table comment and properties
> CREATE TABLE student (id INT, name STRING, age INT)
COMMENT 'this is a comment'
TBLPROPERTIES ('foo'='bar');
-- Specify table comment and properties with different clauses order
> CREATE TABLE student (id INT, name STRING, age INT)
TBLPROPERTIES ('foo'='bar')
COMMENT 'this is a comment';
-- Create partitioned table
> CREATE TABLE student (id INT, name STRING, age INT)
PARTITIONED BY (age);
-- Create a table with a generated column
> CREATE TABLE rectangles(a INT, b INT,
area INT GENERATED ALWAYS AS (a * b));
-- Create a table with a string column with a case-insensitive collation.
> CREATE TABLE names(name STRING COLLATE UNICODE_CI);
-- Create a table with a default collation and override for a specific column.
> CREATE TABLE names(name STRING, first_name STRING, id STRING COLLATE UTF8_BINARY) DEFAULT COLLATION UNICODE_CI;
-- Create an external table connected to Oracle
> CREATE TABLE IF NOT EXISTS ora_tab
USING ORACLE
OPTIONS (
url '<jdbc-url>',
dbtable '<table-name>',
user '<username>',
password '<password>'
);
> SELECT * FROM ora_tab;
> CREATE TEMP TABLE temp_1 (a INT);
> INSERT INTO temp_1 VALUES (1);
> SELECT * FROM temp_1;
1