Bagikan melalui


CREATE TABLE [MENGGUNAKAN]

Berlaku untuk:centang ditandai ya Databricks SQL centang ditandai ya 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 di LOCATION 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 dengan REPLACE, yang berarti CREATE OR REPLACE TABLE IF NOT EXISTS tidak diperbolehkan.

  • table_name

    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 atau LOCATION.

    • column_identifier

      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.

    • column_type

      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:dicentang ya Databricks SQL dicentang ya Databricks Runtime 16.1 ke atas

      Untuk STRINGcolumn_type dapat secara opsional menentukan pengaturan urutan yang akan diterapkan untuk operasi perbandingan dan pengurutan pada kolom ini. Pengurutan default adalah tabel default_collation_name.

    • DIHASILKAN SELALU SEBAGAI ( expr )

      Ketika Anda menentukan klausa ini, nilai kolom ini ditentukan oleh expryang ditentukan .

      DEFAULT COLLATION di tabel harus UTF8_BINARY.

      expr dapat terdiri dari literal, pengidentifikasi kolom dalam tabel, dan fungsi atau operator SQL bawaan deterministik kecuali:

      Juga expr tidak boleh berisi subkueri apa pun.

    • DIHASILKAN { SELALU | SECARA BAWAAN } SEBAGAI IDENTITAS [ ( [ MULAI DENGAN mulai ] [ DITAMBAH DENGAN langkah ] ) ]

      Berlaku untuk:centang ditandai ya Databricks SQL centang ditandai ya 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 dengan step. Nilai yang ditetapkan unik tetapi tidak dijamin berurutan. Kedua parameter bersifat opsional, dan nilai defaultnya adalah 1. step tidak bisa menjadi 0.

      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:centang ditandai ya Databricks SQL centang ditandai ya Databricks Runtime 11.3 LTS ke atas

      Menentukan nilai DEFAULT untuk kolom yang digunakan pada INSERT, UPDATE, dan MERGE ... 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:

      Juga default_expression tidak boleh berisi subkueri apa pun.

      DEFAULT didukung untuk sumber CSV, JSON, PARQUET, dan ORC.

    • KOMENTAR column_comment

      String harfiah untuk menjelaskan kolom.

    • column_constraint

      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.

    • Klausa MASK

      Berlaku untuk:ditandai ya Databricks SQL ditandai ya Databricks Runtime 12.2 LTS ke atas ditandai ya 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.

    • batasan_tabel

      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 atau ICEBERG, Anda juga harus menentukan LOCATION, kecuali katalog tabel adalah hive_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 adalah DELTA.

    Berikut ini berlaku untuk: Databricks Runtime

    HIVE mendukung pembuatan tabel Hive SerDe di Databricks Runtime. Anda dapat menentukan file_format dan row_format menggunakan OPTIONS 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.

    • DIPARTISI OLEH

      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.

    • CLUSTER BY

      Berlaku untuk: ditandai centang ya Databricks SQL ditandai centang ya 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.

        • cluster_column

          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 adalah ASC.

      • 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 sebagai managed table dan Azure Databricks membuat lokasi tabel default.

      Menentukan lokasi menjadikan tabel sebagai tabel eksternal.

      Untuk tabel yang tidak berada di katalog hive_metastore, tabel path 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, klausa TBLPROPERTIES, table_specification, atau PARTITIONED 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.

    • OPSI

      Mengatur atau mengatur ulang satu atau beberapa opsi tabel yang ditentukan pengguna.

    • KOMENTAR table_comment

      Sebuah string literal untuk menggambarkan tabel.

    • TBLPROPERTIES

      Secara opsional, atur satu atau beberapa properti yang ditentukan pengguna.

    • KOLASI DEFAULT default_collation_name

      Berlaku untuk:bercentang ya Databricks SQL bercentang ya 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 default UTF8_BINARY.

      Jika tidak ditentukan, kolatasi default adalah UTF8_BINARY.

    • DENGAN ROW FILTER klausa

      Berlaku untuk:ditandai ya Databricks SQL ditandai ya Databricks Runtime 12.2 LTS ke atas ditandai ya 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 menentukan query, Anda juga tidak harus menentukan table_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;