Aracılığıyla paylaş


CREATE TABLE [KULLANIM]

Şunlar için geçerlidir:onay işareti evet olarak işaretlenmiş Databricks SQL onay işareti evet olarak işaretlenmiş Databricks Runtime

İsteğe bağlı olarak bir veri kaynağı kullanarak yönetilen veya dış tablo tanımlar.

Sözdizimi

{ { [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 }

Databricks Runtime 16.1'den önce START WITH, INCREMENT BY'den önce gelmelidir.

Parametreler

  • DEĞİŞTİR

    Belirtilirse, tablo ve içeriğini zaten mevcutsa yenisiyle değiştirir. Bu yan tümce yalnızca Delta ve Apache Iceberg tablolarında desteklenir.

    REPLACE, tablo geçmişi ve verilen ayrıcalıkları korur.

    Not

    Azure Databricks, tabloları bırakmak ve yeniden oluşturmak yerine REPLACE kullanmasını kesinlikle önerir.

  • DIŞ

    Belirtilirse, bir dış tablo oluşturur. Dış tablo oluştururken bir LOCATION yan tümce de sağlamanız gerekir. Dış tablo bırakıldığında LOCATION konumundaki dosyalar silinmeyecek.

  • EĞER YOKSA

    Belirtilirse ve aynı ada sahip bir tablo zaten varsa, ifade yoksayılır.

    IF NOT EXISTS ile REPLACE birlikte bulunamaz; bu, CREATE OR REPLACE TABLE IF NOT EXISTS'nin izin verilmediği anlamına gelir.

  • table_name

    Oluşturulacak tablonun adı. Ad bir zamansal belirtim veya seçenek belirtimi içermemelidir. Ad uygun değilse, tablo geçerli şemada oluşturulur.

    içinde hive_metastore oluşturulan tablolar yalnızca alfasayısal ASCII karakterleri ve alt çizgi (INVALID_SCHEMA_OR_RELATION_NAME) içerebilir.

    Buzdağı tabloları Unity Kataloğu'nda oluşturulmalıdır. Iceberg tabloları hive_metastore içinde oluşturulması desteklenmez.

  • tablo_özellikleri

    Bu isteğe bağlı yan tümcesi sütunların listesini, türlerini, özelliklerini, açıklamalarını ve sütun kısıtlamalarını tanımlar.

    Sütunları tablo şemasında tanımlamazsanız, AS query veya LOCATION belirtmeniz gerekir.

    • column_identifier

      Sütun için benzersiz bir ad.

      Sütun eşleme özelliği ('delta.columnMapping.mode' = 'name') olmayan Delta tablolarının sütun tanımlayıcıları boşluk veya şu karakterleri içermemelidir: , ; { } ( ) \n \t = .

      Tabloların AVRO sütun tanımlayıcıları bir alt çizgi () veya Unicode harfiyle (_ASCII olmayan harfler dahil) başlamalı ve ardından Unicode harfleri, basamaklar ve alt çizgilerden oluşan bir bileşimle izlenmelidir.

      Tabloların ICEBERG sütun tanımlayıcıları benzersiz, büyük/küçük harfe duyarlı olmamalıdır ve standart SQL tanımlayıcı kurallarına uymalıdır. Tüm sorgu altyapıları tarafından desteklenmeyebileceği için boşluk veya özel karakterler kullanmaktan kaçının.

    • sütun_türü

      Sütunun veri türünü belirtir. Azure Databricks tarafından desteklenen tüm veri türleri tüm veri kaynakları tarafından desteklenmez.

    • NOT NULL

      Belirtilirse, sütun NULL değerlerini kabul etmez. Bu yan tümce yalnızca Delta ve Iceberg tablolarında desteklenir.

    • HARMANLAMA collation_name

      Şunlar için geçerlidir:evet olarak işaretlendi Databricks SQL evet olarak işaretlendi Databricks Runtime 16.1 ve üzeri

      STRING column_type için, bu sütundaki karşılaştırma ve sıralama işlemleri için uygulanacak harmanlamayı isteğe bağlı olarak adlandırın. Varsayılan harmanlama tablosu default_collation_name'dır.

    • HER ZAMAN ÜRETİLİR AS ( expr )

      Bu yan tümceyi belirttiğinizde, bu sütunun değeri belirtilen exprtarafından belirlenir.

      Tablonun DEFAULT COLLATION, UTF8_BINARYolmalıdır.

      expr değişmez değerlerden, tablo içindeki sütun tanımlayıcılarından ve aşağıdakiler dışında belirleyici, yerleşik SQL işlevlerinden veya işleçlerinden oluşabilir:

      Ayrıca expr herhangi bir alt sorgu içermemelidir.

    • oluşturuldu { ALWAYS | ÖN TANIMLI } AS IDENTITY [ ( [ START WITH start ] [ INCREMENT BY step ] ) ]

      Şunlar için geçerlidir:onay işareti evet olarak işaretlenmiş Databricks SQL onay işareti evet olarak işaretlenmiş Databricks Runtime 10.4 LTS ve üzeri

      Kimlik sütununu tanımlar. Tabloya yazdığınızda ve kimlik sütunu için değer sağlamadığınızda, otomatik olarak benzersiz ve istatistiksel olarak artan (veya negatifse step azalan) bir değer atanır. Bu yan tümce yalnızca Delta tabloları için desteklenir. Bu yan tümce yalnızca BIGINT veri türüne sahip sütunlar için kullanılabilir.

      Otomatik olarak atanan değerler start ile başlar ve step ile arttırılır. Atanan değerler benzersizdir ancak bitişik olması garanti edilmemektedir. Her iki parametre de isteğe bağlıdır ve varsayılan değer 1'dir. step 0 olamaz.

      Otomatik olarak atanan değerler kimlik sütun türü aralığının dışındaysa sorgu başarısız olur.

      Kullanıldığında ALWAYS , kimlik sütunu için kendi değerlerinizi sağlayamazsınız.

      Aşağıdaki işlemler desteklenmez:

      • PARTITIONED BY kimlik sütunu
      • UPDATE kimlik sütunu

      Not

      Bir tabloda kimlik sütununu bildirmek eşzamanlı işlemleri devre dışı bırakır. Yalnızca hedef tabloya eşzamanlı yazmanın gerekli olmadığı kullanım durumlarında kimlik sütunlarını kullanın.

    • VARSAYILAN varsayılan_ifade

      Şunlar için geçerlidir:onay işareti evet olarak işaretlenmiş Databricks SQL onay işareti evet olarak işaretlenmiş Databricks Runtime 11.3 LTS ve üzeri

      Belirtilmediğinde DEFAULT, INSERT, UPDATE, ve MERGE ... INSERT üzerinde kullanılan sütun için bir değer tanımlar.

      Varsayılan belirtilmezse DEFAULT NULL, atanabilir sütunlar için uygulanır.

      default_expression değişmez değerlerden ve aşağıdakiler dışında yerleşik SQL işlevlerinden veya işleçlerinden oluşabilir:

      Ayrıca default_expression herhangi bir alt sorgu içermemelidir.

      DEFAULT, CSV, JSONve PARQUET kaynakları için ORCdesteklenir.

    • YORUM sütun_yorumu

      Sütunu tanımlayan bir dize sabiti.

    • column_constraint

      Tablodaki sütuna birincil anahtar veya yabancı anahtar kısıtlaması ekler.

      Kısıtlamalar katalogdaki hive_metastore tablolar için desteklenmez.

      Tabloya denetim kısıtlaması eklemek için kullanın ALTER TABLE.

    • MASK yan tümcesi

      Şunlar için geçerlidir:Evet (onay işareti) Databricks SQL Evet (onay işareti) Databricks Runtime 12.2 LTS ve üzeri Evet (onay işareti) Yalnızca Unity Catalog

      Önemli

      Bu özellik Genel Önizlemededir.

      Hassas verileri anonim hale getirmek için bir sütun maskesi işlevi ekler. Bu sütundaki sonraki tüm sorgular, sütunun özgün değeri yerine bu işlevi sütun üzerinde değerlendirmenin sonucunu alır. Bu, işlevin çağıran kullanıcının kimliğini veya grup üyeliklerini inceleyerek değeri redakte etmeye karar verdiği ayrıntılı erişim kontrolü amaçları için faydalı olabilir.

    • tablo kısıtlaması

      Tabloya bilgi amaçlı birincil anahtar veya bilgi amaçlı yabancı anahtar kısıtlaması ekler.

      Katalogdaki hive_metastore tablolar için anahtar kısıtlamaları desteklenmez.

      Tabloya denetim kısıtlaması eklemek için kullanın ALTER TABLE.

  • Veri kaynağının kullanımı

    data_source dosya biçiminde veya federasyon JDBC veri kaynağı olabilir.

    Dosya biçimi aşağıdakilerden biri olmalıdır:

    • AVRO
    • BINARYFILE
    • CSV
    • DELTA
    • ICEBERG
    • JSON
    • ORC
    • PARQUET
    • TEXT

    DELTA veya ICEBERG dışındaki herhangi bir dosya biçimi için, tablo kataloğu LOCATION olmadığı sürece bir hive_metastore de belirtmelisiniz.

    Aşağıdaki federasyon JDBC kaynakları desteklenir:

    • POSTGRESQL
    • SQLSERVER
    • MYSQL
    • BIGQUERY
    • NETSUITE
    • ORACLE
    • REDSHIFT
    • SNOWFLAKE
    • SQLDW
    • SYNAPSE
    • SALESFORCE
    • SALESFORCE_DATA_CLOUD
    • TERADATA
    • WORKDAY_RAAS
    • MONGODB

    Federasyon JDBC kaynağı belirtirken, gerekli bağlantı bilgileriyle birlikte OPTIONS koşulunu da belirtmeniz gerekir. Federasyon veri kaynaklarını sorgulama hakkında daha fazla bilgi için bkz . JDBC kullanarak veritabanlarını sorgulama.

    Tablo için kullanılacak aşağıdaki ek dosya biçimleri Databricks Runtime'da desteklenir:

    • JDBC
    • LIBSVM
    • Özel bir uygulamanın tam nitelikli sınıf adı org.apache.spark.sql.sources.DataSourceRegister.

    Atlanırsa USING , varsayılan değer olur DELTA.

    Aşağıdakiler şunlar için geçerlidir: Databricks Runtime

    HIVE , Databricks Runtime'da Hive SerDe tablosu oluşturmak için desteklenir. Hive'a özgü file_format ve row_format öğesini, büyük/küçük harf duyarlılığı olmayan bir dize eşlemesi olan OPTIONS yan tümcesini kullanarak belirtebilirsiniz. Şunlardır: option_keys

    • FILEFORMAT
    • INPUTFORMAT
    • OUTPUTFORMAT
    • SERDE
    • FIELDDELIM
    • ESCAPEDELIM
    • MAPKEYDELIM
    • LINEDELIM
  • tablo_koşulları

    İsteğe bağlı olarak yeni tablo için konum, bölümleme, kümeleme, seçenekler, açıklamalar ve kullanıcı tanımlı özellikleri belirtin. Her alt yan tümce yalnızca bir kez belirtilebilir.

    • BÖLÜMLENDİRİLMİŞ

      Tabloyu sütunların bir alt kümesine göre bölümlendirmek için isteğe bağlı bir yan tümce.

      Not

      Yönetilen Iceberg tablolarında Azure Databricks desteklemez PARTITIONED BY. Bunun yerine veri düzenini iyileştirmek için sıvı kümeleme (CLUSTER BY) kullanın. Delta tablolarında, tablo tanımını atlarsanız Azure Databricks bölümleme sütunlarını sütun belirtiminde daha önce listeleseniz bile tablonun sonuna yerleştirir.

    • CLUSTER BY

      Şunlar için geçerlidir: evet olarak işaretlendi Databricks SQL denetimi evet olarak işaretlendi Databricks Runtime 13.3 ve üzeri

      Delta veya Iceberg tablosunu belirli sütunlara göre kümelendirmek için isteğe bağlı bir yan tümce. Bkz Tablolar için sıvı kümeleme kullanma. Diğer tabloları kümelemek için kullanın clustered_by_clause.

      Iceberg tablolarında kullanırken silme vektörlerini ve satır kimliklerini açıkça devre dışı bırakmanız CLUSTER BYgerekir.

    ile PARTITIONED BYsıvı kümelemlerini birleştiremezsiniz.

    • kümeleme_kuralına_göre

      İsteğe bağlı olarak, sütunların bir alt kümesini kullanarak tabloyu veya her bölümü sabit sayıda karma demet halinde kümeleyin.

      Bu yan tümce Delta veya Iceberg tablolarında desteklenmez. Bunun yerine CLUSTER BY kullanın.

      • GRUPLANDIRILDI

        Her bölümün kümelendirildiği sütun kümesini veya bölümleme belirtilmemişse tabloyu belirtir.

        • cluster_column

          Tablo içindeki bir column_identifier öğesine başvuran tanımlayıcı. Birden fazla sütun belirtirseniz yineleme olmamalıdır. Kümeleme bölüm düzeyinde çalıştığından, bölüm sütununu küme sütunu olarak da adlandırmamalısınız.

      • SIRALANMA DURUMU

        İsteğe bağlı olarak, kümedeki satırlar için bir sıralama düzeni korur.

        • sort_column

          Demeği sıralamak için kullanılacak sütun. Sütun, bölümleme sütunu olarak kullanılmamalıdır. Sıralama sütunları benzersiz olmalıdır.

        • ASC veya DESC

          İsteğe bağlı olarak, sort_column artan veya ASC azalan sırada sıralanıp sıralanmayacağını DESC belirtir. Varsayılan değerler şeklindedir ASC.

      • NUM_BUCKETS KOVALARA

        Her bir bölümün (veya bölümleme belirtilmemişse tablonun) ayrıldığı kova sayısını belirten bir tamsayı sabiti.

    • YER yolu [ İLE ( CREDENTIAL credential_name ) ]

      Tablo verilerinin depolandığı dizine yönelik isteğe bağlı bir yoldur ve dağıtılmış depolamadaki bir yol olabilir. path bir METİN sabiti olmalıdır. Konum belirtmezseniz, tablo bir olarak kabul edilir managed table ve Azure Databricks varsayılan bir tablo konumu oluşturur.

      Konum belirtilmesi, tabloyu dış tablo yapar.

      Katalogda yer almayan tablolar için, geçerli bir hive_metastore belirtilmedikçe, tablonun path ile korunması gerekir.

      Yönetilen tabloların konumuyla çakışan konumlarda dış tablolar oluşturamazsınız.

      Delta tabloları için, eğer bu yolda zaten veri varsa, tablo yapılandırmasını LOCATION'dan devralır. Sonuç olarak, belirtilen TBLPROPERTIES, table_specification veya PARTITIONED BY tümcelerinin Delta konumundaki mevcut verilerle tam olarak eşleşmesi gerekir.

      Iceberg tablolarında LOCATION yan tümcesi desteklenmez. Yabancı Buzdağı tabloları, bir yabancı katalog oluşturduğunuzda otomatik olarak kaydedilir; yönetilen Buzdağı tablolarını ise bir konum belirtmeden oluşturmanız gerekir.

    • SEÇENEKLER

      Kullanıcı tanımlı bir veya daha fazla tablo seçeneğini ayarlar veya sıfırlar.

    • YORUM tablo_yorumu

      Tabloyu tanımlamak için bir dize sabiti.

    • TBLPROPERTIES

      İsteğe bağlı olarak bir veya daha fazla kullanıcı tanımlı özellik ayarlar.

    • VARSAYıLAN HARMANLAMA default_collation_name

      Şunun için geçerlidir:evet olarak işaretlendi Databricks SQL evet olarak işaretlendi Databricks Runtime 16.3 ve üzeri

      Aşağıdakiler için kullanılacak varsayılan harmanlamayı tanımlar:

      • Tablodaki STRING sütunları ve alanları
      • DEFAULT ifadesi
      • CREATE TABLE AS query'nin gövdesi

      CHECK kısıtlamaları ve oluşturulan sütun ifadeleri için varsayılan UTF8_BINARYharmanlaması gerekir.

      Belirtilmezse, varsayılan sıralama düzeni UTF8_BINARYolarak ayarlanır.

    • WITH ROW FILTER yan tümcesi

      Şunlar için geçerlidir:Evet (onay işareti) Databricks SQL Evet (onay işareti) Databricks Runtime 12.2 LTS ve üzeri Evet (onay işareti) Yalnızca Unity Catalog

      Tabloya bir satır filtresi işlevi ekler. Bu tablodan sonraki tüm sorgular, işlevin TRUE değerini değerlendirdiği satırların bir alt kümesini alır. Bu, işlevin belirli satırları filtreleyip filtrelememeye karar vermek için çağıran kullanıcının kimlik veya grup üyeliklerini incelediği ayrıntılı erişim denetimi amaçları için yararlı olabilir.

  • AS sorgusu

    Bu isteğe bağlı koşul, query'dan gelen verileri kullanarak tabloyu doldurur. query belirttiğinizde, bir table_specification belirtmemelisiniz. Tablo şeması sorgudan türetilir.

    Azure Databricks'in, oluşturulan tablonun giriş sorgusuyla tam olarak aynı verileri içerdiğinden emin olmak için temel alınan veri kaynağının üzerine giriş sorgusunun verilerini yazdığını unutmayın.

Örnekler

-- 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;