MEMBUAT TABEL [MENGGUNAKAN]

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

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

    • column_identifier

      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.

    • 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. 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:

      Juga expr tidak boleh berisi subkueri apa pun.

    • DIHASILKAN { SELALU | SECARA DEFAULT } SEBAGAI IDENTITY [ ( [ MULAI DENGAN mulai ] [ BERTAMBAH DENGAN langkah ] ) ]

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

      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 identitas
      • UPDATE 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: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 ditentukan, DEFAULT NULL diterapkan untuk kolom yang dapat diubah ke 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 literal untuk menggambarkan kolom.

    • column_constraint

      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.

    • Klausa MASK

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

    • table_constraint

      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 kustomorg.apache.spark.sql.sources.DataSourceRegister.

    Jika USING dihilangkan, defaultnya adalah DELTA.

    Untuk setiap data_source selain dari DELTA, Anda juga harus menentukan LOCATION kecuali katalog tabel adalah hive_metastore.

    Berikut ini berlaku untuk: Databricks Runtime

    HIVE didukung untuk membuat tabel Apache Hive SerDe di Databricks Runtime. Anda dapat menentukan Apache Hive file_format dan row_formatmenggunakanOPTIONS 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.

    • DIPARTISI OLEH

      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-alih PARTITIONED BY untuk tabel Delta.

    • CLUSTER BY

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

        • cluster_column

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

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

      Menentukan lokasi menjadikan tabel sebagai tabel eksternal.

      Untuk tabel yang tidak berada di hive_metastore katalog, tabel path 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 klausul TBLPROPERTIES, table_specification, atau PARTITIONED BY yang ditentukan untuk tabel Delta Lake, klausul tersebut harus cocok dengan data lokasi Delta Lake.

    • OPSI

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

    • KOMENTAR table_comment

      String literal untuk menggambarkan tabel.

    • TBLPROPERTIES

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

    • DENGAN klausa FILTER BARIS

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