MEMBUAT TABEL [MENGGUNAKAN]
Berlaku untuk: Databricks SQL Databricks Runtime
Menentukan tabel terkelola atau eksternal, secara opsional menggunakan sumber data.
Sintaks
{ { [CREATE OR] REPLACE TABLE | CREATE [EXTERNAL] 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 |
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 |
WITH { ROW FILTER clause } } [...]
clustered_by_clause
{ CLUSTERED BY ( cluster_column [, ...] )
[ SORTED BY ( { sort_column [ ASC | DESC ] } [, ...] ) ]
INTO num_buckets BUCKETS }
Parameter
REPLACE
Jika ditentukan, ganti tabel dan kontennya jika sudah ada. Opsi ini hanya didukung untuk tabel Delta Lake.
REPLACE
mempertahankan riwayat tabel.Catatan
Azure Databricks sangat menyarankan untuk menggunakan
REPLACE
alih-alih menghilangkan dan membuat ulang tabel Delta Lake.EKSTERNAL
Jika ditentukan, membuat tabel eksternal. Saat membuat tabel eksternal, Anda juga harus memberikan
LOCATION
klausa. Ketika tabel eksternal dihilangkan, file diLOCATION
tidak akan dihilangkan.IF NOT EXISTS
Jika ditentukan dan tabel dengan nama yang sama sudah ada, pernyataan diabaikan.
IF NOT EXISTS
tidak dapat hidup berdampingan denganREPLACE
, yang berartiCREATE OR REPLACE TABLE IF NOT EXISTS
tidak diperbolehkan.-
Nama tabel yang akan dibuat. Nama tidak boleh menyertakan spesifikasi temporal. Jika nama tidak memenuhi syarat, tabel dibuat dalam skema saat ini.
Tabel yang dibuat hanya
hive_metastore
dapat berisi karakter dan garis bawah ASCII alfanumerik (INVALID_SCHEMA_OR_RELATION_NAME). table_specification
Klausa opsional ini menentukan daftar kolom, jenis, properti, deskripsi, dan batasan kolom.
Jika Anda tidak menentukan kolom skema tabel, Anda harus menentukan salah satu
AS query
atauLOCATION
.-
Nama unik untuk kolom.
Pengidentifikasi kolom tabel Delta Lake tanpa properti pemetaan kolom (
'delta.columnMapping.mode' = 'name'
) tidak boleh berisi karakter ' ' (spasi), ',', ';', '{', '}', '(', ')'. 'n', 't', dan '='.Pengidentifikasi
AVRO
kolom tabel harus dimulai dengan '' atau huruf Unicode (termasuk huruf non-ASCII) dan diikuti dengan kombinasi '', huruf Unicode, dan digit. -
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
. Opsi ini hanya didukung untuk tabel Delta Lake.DIHASILKAN SELALU SEBAGAI ( expr )
Ketika Anda menentukan klausa ini, nilai kolom ini ditentukan oleh
expr
yang ditentukan.expr
dapat terdiri atas 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
Juga
expr
tidak boleh berisi subkueri apa pun.DIHASILKAN { SELALU | SECARA DEFAULT } SEBAGAI IDENTITY [ ( [ MULAI DENGAN mulai ] [ BERTAMBAH DENGAN langkah ] ) ]
Berlaku untuk: Databricks SQL Databricks Runtime 10.4 LTS ke atas
Mendefinisikan kolom identitas. Ketika Anda menulis ke tabel, dan tidak memberikan nilai untuk kolom identitas, itu akan secara otomatis ditetapkan nilai yang unik dan meningkat secara statistik (atau menurun jika
step
negatif). Opsi ini hanya didukung untuk tabel Delta Lake. Klausa ini hanya dapat digunakan untuk kolom dengan tipe data BIGINT.Nilai yang ditetapkan secara otomatis dimulai dengan
start
dan bertambah denganstep
. Nilai yang ditetapkan bersifat unik namun tidak dijamin berseberangan. Kedua parameter bersifat opsional, dan nilai defaultnya adalah 1.step
tidak bisa menjadi0
.Jika nilai yang ditetapkan secara otomatis berada di luar jangkauan tipe kolom identitas, kueri akan gagal.
Saat
ALWAYS
digunakan, Anda tidak dapat memberikan nilai Anda sendiri untuk kolom identitas.Operasi berikut tidak didukung:
PARTITIONED BY
kolom identitasUPDATE
kolom identitas
Catatan
Mendeklarasikan kolom identitas pada tabel Delta 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 atas
Menentukan nilai
DEFAULT
untuk kolom yang digunakan padaINSERT
,UPDATE
, danMERGE ... INSERT
saat kolom tidak ditentukan.Jika tidak ada default yang ditentukan,
DEFAULT NULL
diterapkan untuk kolom yang dapat diubah ke null.default_expression
dapat terdiri dari fungsi atau operator SQL literal dan bawaan kecuali:- Fungsi agregat
- Fungsi jendela analitik
- Fungsi jendela peringkat
- Fungsi generator bernilai tabel
Juga
default_expression
tidak boleh berisi subkueri apa pun.DEFAULT
didukung untuk sumberCSV
,JSON
,PARQUET
, danORC
.KOMENTAR column_comment
String literal untuk menggambarkan kolom.
-
Penting
Fitur ini ada di Pratinjau Publik.
Menambahkan satu kunci primer atau batasan kunci asing ke kolom dalam tabel Delta Lake.
Batasan tidak didukung untuk tabel-tabel dalam katalog
hive_metastore
.Untuk menambahkan batasan pemeriksaan ke tabel Delta Lake, gunakan ALTER TABLE.
-
Berlaku untuk: Databricks SQL Databricks Runtime 12.2 LTS dan di atas Unity Catalog saja
Penting
Fitur ini ada di Pratinjau Publik.
Menambahkan fungsi masker kolom untuk menganonimkan data sensitif. Semua kueri di masa mendatang dari kolom tersebut akan menerima hasil evaluasi fungsi tersebut di atas kolom sebagai pengganti nilai asli kolom. Ini dapat berguna untuk tujuan kontrol akses terperinci di mana fungsi dapat memeriksa identitas dan/atau keanggotaan grup pengguna yang memanggil untuk memutuskan apakah akan meredakan nilai.
-
Menambahkan kunci primer informasi atau batasan kunci asing informasi ke tabel Delta Lake.
Batasan kunci tidak didukung untuk tabel dalam
hive_metastore
katalog.Untuk menambahkan batasan pemeriksaan ke tabel Delta Lake, gunakan ALTER TABLE.
-
MENGGUNAKAN data_source
Format file yang akan digunakan untuk tabel.
data_source
harus salah satu dari:AVRO
BINARYFILE
CSV
DELTA
JSON
ORC
PARQUET
TEXT
Format file tambahan berikut yang akan digunakan untuk tabel didukung dalam Databricks Runtime:
JDBC
LIBSVM
- nama kelas yang sepenuhnya memenuhi syarat dari implementasi kustom
org.apache.spark.sql.sources.DataSourceRegister
.
Jika
USING
dihilangkan, defaultnya adalahDELTA
.Untuk setiap
data_source
selain dariDELTA
, Anda juga harus menentukanLOCATION
kecuali katalog tabel adalahhive_metastore
.Berikut ini berlaku untuk: Databricks Runtime
HIVE
didukung untuk membuat tabel Apache Hive SerDe di Databricks Runtime. Anda dapat menentukan Apache Hivefile_format
danrow_format
menggunakanOPTIONS
klausul, yang merupakan peta string kasus tidak peka huruf besar/kecil.option_keys
Adalah :FILEFORMAT
INPUTFORMAT
OUTPUTFORMAT
SERDE
FIELDDELIM
ESCAPEDELIM
MAPKEYDELIM
LINEDELIM
table_clauses
Tentukan lokasi, partisi, pengelompokan, opsi, komentar, dan properti yang ditentukan pengguna secara opsional untuk tabel baru. Setiap sub klausul hanya dapat ditentukan satu kali.
-
Klausa opsional untuk mempartisi tabel menurut subset kolom.
Catatan
Jika Anda tidak menentukan tabel Delta, kolom partisi ditempatkan di akhir tabel, meskipun ditentukan sebelumnya dalam spesifikasi kolom. Pertimbangkan untuk menggunakan
CLUSTER BY
alih-alihPARTITIONED BY
untuk tabel Delta. -
Berlaku untuk: Databricks SQL Databricks Runtime 13.3 dan yang lebih baru
Klausa opsional untuk mengkluster tabel Delta menurut subset kolom. Untuk mengkluster tabel lain, gunakan
clustered_by_clause
.Pengklusteran cairan Delta Lake tidak dapat dikombinasikan dengan
PARTITIONED BY
. clustered_by_clause
Secara opsional kluster tabel atau setiap partisi ke dalam sejumlah tetap wadah hash menggunakan subset kolom.
Pengklusteran tidak didukung untuk tabel Delta Lake.
DIKKLUSTERKAN OLEH
Menentukan kumpulan kolom untuk mengkluster setiap partisi, atau tabel jika tidak ada partisi yang ditentukan.
-
Pengidentifikasi yang merujuk
column_identifier
dalam tabel. Jika Anda menentukan lebih dari satu kolom, tidak boleh ada duplikat. Karena pengklusteran beroperasi pada tingkat partisi, Anda tidak boleh menamai kolom partisi juga sebagai kolom kluster.
-
DIURUTKAN MENURUT
Secara opsional mempertahankan pengurutan untuk baris dalam wadah.
sort_column
Kolom untuk mengurutkan wadah. Kolom tidak boleh kolom partisi. Mengurutkan kolom harus unik.
ASC atau DESC
Secara opsional menentukan apakah
sort_column
diurutkan dalam urutan naik (ASC
) atau turun (DESC
). Nilai defaultnyaASC
.
KE DALAM WADAH num_buckets
BILANGAN BULAT harfiah yang menentukan jumlah wadah tempat 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.
path
harus berupa STRING literal. Jika Anda menentukan tidak ada lokasi, tabel dianggapmanaged table
dan Azure Databricks membuat lokasi tabel default.Menentukan lokasi menjadikan tabel sebagai tabel eksternal.
Untuk tabel yang tidak berada di
hive_metastore
katalog, tabelpath
harus dilindungi oleh lokasi eksternal kecuali kredensial penyimpanan yang valid ditentukan.Anda tidak dapat membuat tabel eksternal di lokasi yang tumpang tindih dengan lokasi tabel terkelola.
Untuk tabel Delta Lake, konfigurasi tabel diwarisi dari
LOCATION
jika data ada. Oleh karena itu, jika ada klausulTBLPROPERTIES
,table_specification
, atauPARTITIONED BY
yang ditentukan untuk tabel Delta Lake, klausul tersebut harus cocok dengan data lokasi Delta Lake.-
Menyiapkan atau mengatur ulang satu atau beberapa opsi tabel yang ditentukan pengguna.
KOMENTAR table_comment
String literal untuk menggambarkan tabel.
-
Secara opsional, atur satu atau beberapa properti yang ditentukan pengguna.
DENGAN klausa FILTER BARIS
Berlaku untuk: Databricks SQL Databricks Runtime 12.2 LTS dan di atas Unity Catalog saja
Penting
Fitur ini ada di Pratinjau Publik.
Menambahkan fungsi filter baris ke tabel. Semua kueri di masa mendatang dari tabel tersebut akan menerima subset barisnya yang dievaluasi fungsinya ke TRUE boolean. Ini dapat berguna untuk tujuan kontrol akses terperinci di mana fungsi dapat memeriksa identitas dan/atau keanggotaan grup pengguna yang memanggil untuk memutuskan apakah akan memfilter baris tertentu.
-
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 yang mendasarinya dengan data kueri input, untuk memastikan tabel yang dibuat berisi data yang persis sama dengan kueri input.
Contoh
-- Creates a Delta table
> CREATE TABLE student (id INT, name STRING, age INT);
-- 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 '/mnt/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));