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] 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.
REPLACE
mempertahankan riwayat tabel serta hak istimewa yang diberikan.Catatan
Azure Databricks sangat merekomendasikan penggunaan
REPLACE
alih-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 diLOCATION
tidak akan dihilangkan.JIKA TIDAK ADA
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 atau spesifikasi opsi. Jika nama tidak memenuhi syarat, tabel dibuat dalam skema saat ini.
Tabel yang dibuat dalam
hive_metastore
hanya 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_metastore
tidak 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 query
atauLOCATION
.-
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
AVRO
kolom tabel harus dimulai dengan garis bawah (_
) atau huruf Unicode (termasuk huruf non-ASCII) dan diikuti dengan kombinasi huruf, digit, dan garis bawah Unicode.Pengidentifikasi
ICEBERG
kolom 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 atas
Untuk
STRING
column_type
dapat 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
expr
yang ditentukan .DEFAULT COLLATION
di tabel harusUTF8_BINARY
.expr
dapat 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
expr
tidak 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 atas
Menentukan 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
step
negatif). 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
start
dan meningkat sesuai denganstep
. Nilai yang ditetapkan unik tetapi tidak dijamin berurutan. Kedua parameter bersifat opsional, dan nilai defaultnya adalah 1.step
tidak bisa menjadi0
.Jika nilai yang ditetapkan secara otomatis berada di luar rentang 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 identitas -
UPDATE
kolom 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 atas
Menentukan nilai
DEFAULT
untuk kolom yang digunakan padaINSERT
,UPDATE
, danMERGE ... INSERT
saat kolom tidak ditentukan.Jika tidak ada default yang dibuat,
DEFAULT NULL
diterapkan untuk kolom yang dapat bernilai 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 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 saja
Penting
Fitur ini ada di Pratinjau Publik.
Menambahkan 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.
-
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_source
dapat berupa format file atau sumber data JDBC federasi.Format file harus salah satu dari berikut ini:
AVRO
BINARYFILE
CSV
DELTA
ICEBERG
JSON
ORC
PARQUET
TEXT
Untuk format file apa pun selain
DELTA
atauICEBERG
, Anda juga harus menentukanLOCATION
, kecuali katalog tabel adalahhive_metastore
.Sumber JDBC federasi berikut didukung:
POSTGRESQL
SQLSERVER
MYSQL
BIGQUERY
NETSUITE
ORACLE
REDSHIFT
SNOWFLAKE
SQLDW
SYNAPSE
SALESFORCE
SALESFORCE_DATA_CLOUD
TERADATA
WORKDAY_RAAS
MONGODB
Saat menentukan sumber JDBC federasi, Anda juga harus menentukan
OPTIONS
klausul 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:
JDBC
LIBSVM
- nama kelas yang memenuhi persyaratan sepenuhnya dari implementasi kustom
org.apache.spark.sql.sources.DataSourceRegister
.
Jika
USING
dihilangkan, defaultnya adalahDELTA
.Berikut ini berlaku untuk: Databricks Runtime
HIVE
mendukung pembuatan tabel Hive SerDe di Databricks Runtime. Anda dapat menentukanfile_format
danrow_format
menggunakanOPTIONS
klausul, yang merupakan peta string yang tidak peka terhadap huruf besar dan kecil.option_keys
adalah:FILEFORMAT
INPUTFORMAT
OUTPUTFORMAT
SERDE
FIELDDELIM
ESCAPEDELIM
MAPKEYDELIM
LINEDELIM
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 atas
Klausa 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
.
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 BY
sebagai gantinya.DIKKLUSTERKAN OLEH
Menentukan kumpulan kolom untuk mengelompokkan setiap partisi, atau tabel jika tidak ada partisi yang ditentukan.
-
Pengidentifikasi yang merujuk pada
column_identifier
dalam 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_column
diurutkan 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.
path
harus berupa literal string. Jika Anda menentukan tidak ada lokasi tabel yang dianggap sebagaimanaged table
dan Azure Databricks membuat lokasi tabel default.Menentukan lokasi menjadikan tabel sebagai tabel eksternal.
Untuk tabel yang tidak berada di katalog
hive_metastore
, tabelpath
harus 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
LOCATION
jika data sudah ada di jalur tersebut. Akibatnya, klausaTBLPROPERTIES
,table_specification
, atauPARTITIONED BY
yang ditentukan harus sama persis dengan data yang ada di lokasi Delta.Untuk tabel Iceberg,
LOCATION
klausul 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 atas
Menentukan kolatasi default yang akan digunakan untuk:
-
STRING
kolom dan bidang tabel - ekspresi
DEFAULT
- Badan
CREATE TABLE AS query
CHECK
batasan dan ekspresi kolom yang dihasilkan memerlukan kolasi defaultUTF8_BINARY
.Jika tidak ditentukan, kolatasi default adalah
UTF8_BINARY
.-
DENGAN ROW FILTER klausa
Berlaku untuk:
Databricks SQL
Databricks Runtime 12.2 LTS ke atas
Unity Catalog saja
Menambahkan 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.
-
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;