Share via


Unity Kataloğu'nda tablo oluşturma

Bu makalede, Unity Kataloğu'nda yönetilen ve dış tablolar kavramı tanıtılmaktadır ve Unity Kataloğu'nda tabloların nasıl oluşturulacağı açıklanmaktadır.

Not

Tablo oluştururken Unity Kataloğu tarafından yönetilen bir kataloğa başvurduğunuz veya varsayılan kataloğu Unity Kataloğu tarafından yönetilen bir katalog olarak ayarladığınızdan emin olun. Bkz. Varsayılan kataloğu yönetme.

Katalog hive_metastore , Katalog Gezgini'nde görünür ancak Unity Kataloğu tarafından yönetilmediği kabul edilmez. Azure Databricks çalışma alanınızın Hive meta veri deposu tarafından yönetilir. Listelenen diğer tüm kataloglar Unity Kataloğu tarafından yönetilir.

Hive meta veri deposunda kayıtlı mevcut tabloları Unity Kataloğu'na yükseltmek için Unity Kataloğu tablo yükseltme arabirimini kullanabilirsiniz. Bkz. Hive tablolarını ve görünümlerini Unity Kataloğu'na yükseltme.

Yönetilen tablolar

Yönetilen tablolar, Unity Kataloğu'nda tablo oluşturmanın varsayılan yoludur. Unity Kataloğu, bu tablolar için yaşam döngüsünü ve dosya düzenini yönetir. Bu tablolardaki dosyaları doğrudan işlemek için Azure Databricks dışındaki araçları kullanmamalısınız.

Yönetilen tablolar, şemanın ve kataloğun nasıl yapılandırıldığına bağlı olarak meta veri deposu, katalog veya şema düzeyinde yönetilen depolamada depolanır. Bkz . Unity Kataloğu'nda yönetilen depolama konumu belirtme.

Yönetilen tablolar her zaman Delta tablo biçimini kullanır.

Yönetilen tablo bırakıldığında, temel alınan veriler 30 gün içinde bulut kiracınızdan silinir.

Dış tablolar

Dış tablolar, verileri meta veri deposu, katalog veya şema için belirtilen yönetilen depolama konumunun dışında depolanan tablolardır. Dış tabloları yalnızca Azure Databricks kümeleri veya Databricks SQL ambarları dışındaki verilere doğrudan erişmeniz gerektiğinde kullanın.

Dış tabloda çalıştırdığınızda DROP TABLE Unity Kataloğu temel alınan verileri silmez. Tabloyu bırakmak için sahibi olmanız gerekir. Dış tablolardaki ayrıcalıkları yönetebilir ve bunları yönetilen tablolarla aynı şekilde sorgularda kullanabilirsiniz. SQL ile dış tablo oluşturmak için deyiminizde CREATE TABLE bir LOCATION yol belirtin. Dış tablolar aşağıdaki dosya biçimlerini kullanabilir:

  • DELTA
  • CSV
  • JSON
  • AVRO
  • PARKE
  • ORC
  • METİN

Dış tablonun temel bulut depolama alanına erişimi yönetmek için depolama kimlik bilgilerini ve dış konumları ayarlamanız gerekir.

Daha fazla bilgi için bkz . Dış tablo oluşturma.

Gereksinimler

Tabloyu oluşturmak istediğiniz şemada ayrıcalığınız ve şemadaki USE SCHEMA ayrıcalığınız ve USE CATALOG üst katalogdaki ayrıcalığınız olmalıdırCREATE TABLE.

Dış tablo oluşturuyorsanız, ek gereksinimler için bkz . Dış tablo oluşturma.

Yönetilen tablo oluşturma

Yönetilen tablo oluşturmak için aşağıdaki SQL komutunu çalıştırın. Köşeli ayraç içindeki öğeler isteğe bağlıdır. Yer tutucu değerlerini değiştirin:

  • <catalog-name>: Tabloyu içerecek kataloğun adı..

    Bu, Azure Databricks çalışma alanınızla ilişkili Hive meta veri deposu için otomatik olarak oluşturulan katalog olamaz hive_metastore . Tabloyu çalışma alanının varsayılan kataloğunda oluşturuyorsanız katalog adını bırakabilirsiniz.

  • <schema-name>: Tabloyu içerecek şemanın adı..

  • <table-name>: Tablo için bir ad.

  • <column-specification>: Her sütunun adı ve veri türü.

SQL

CREATE TABLE <catalog-name>.<schema-name>.<table-name>
(
  <column-specification>
);

Python

spark.sql("CREATE TABLE <catalog-name>.<schema-name>.<table-name> "
  "("
  "  <column-specification>"
  ")")

R

library(SparkR)

sql(paste("CREATE TABLE <catalog-name>.<schema-name>.<table-name> ",
  "(",
  "  <column-specification>",
  ")",
  sep = ""))

Scala

spark.sql("CREATE TABLE <catalog-name>.<schema-name>.<table-name> " +
  "(" +
  "  <column-specification>" +
  ")")

Databricks Terraform sağlayıcısını ve databricks_table kullanarak da yönetilen tablo oluşturabilirsiniz. databricks_tables kullanarak tablo tam adlarının listesini alabilirsiniz.

Örneğin, tabloyu main.default.department oluşturmak ve içine beş satır eklemek için:

SQL

CREATE TABLE main.default.department
(
  deptcode  INT,
  deptname  STRING,
  location  STRING
);

INSERT INTO main.default.department VALUES
  (10, 'FINANCE', 'EDINBURGH'),
  (20, 'SOFTWARE', 'PADDINGTON'),
  (30, 'SALES', 'MAIDSTONE'),
  (40, 'MARKETING', 'DARLINGTON'),
  (50, 'ADMIN', 'BIRMINGHAM');

Python

spark.sql("CREATE TABLE main.default.department "
  "("
  "  deptcode  INT,"
  "  deptname  STRING,"
  "  location  STRING"
  ")"
  "INSERT INTO main.default.department VALUES "
  "  (10, 'FINANCE', 'EDINBURGH'),"
  "  (20, 'SOFTWARE', 'PADDINGTON'),"
  "  (30, 'SALES', 'MAIDSTONE'),"
  "  (40, 'MARKETING', 'DARLINGTON'),"
  "  (50, 'ADMIN', 'BIRMINGHAM')")

R

library(SparkR)

sql(paste("CREATE TABLE main.default.department ",
  "(",
  "  deptcode  INT,",
  "  deptname  STRING,",
  "  location  STRING",
  ")",
  "INSERT INTO main.default.department VALUES ",
  "  (10, 'FINANCE', 'EDINBURGH'),",
  "  (20, 'SOFTWARE', 'PADDINGTON'),",
  "  (30, 'SALES', 'MAIDSTONE'),",
  "  (40, 'MARKETING', 'DARLINGTON'),",
  "  (50, 'ADMIN', 'BIRMINGHAM')",
  sep = ""))

Scala

spark.sql("CREATE TABLE main.default.department " +
  "(" +
  "  deptcode  INT," +
  "  deptname  STRING," +
  "  location  STRING" +
  ")" +
  "INSERT INTO main.default.department VALUES " +
  "  (10, 'FINANCE', 'EDINBURGH')," +
  "  (20, 'SOFTWARE', 'PADDINGTON')," +
  "  (30, 'SALES', 'MAIDSTONE')," +
  "  (40, 'MARKETING', 'DARLINGTON')," +
  "  (50, 'ADMIN', 'BIRMINGHAM')")

Yönetilen tabloyu bırakma

Tabloyu bırakmak için tablonun sahibi olmanız gerekir. Yönetilen tabloyu bırakmak için aşağıdaki SQL komutunu çalıştırın:

DROP TABLE IF EXISTS catalog_name.schema_name.table_name;

Yönetilen tablo bırakıldığında, temel alınan veriler 30 gün içinde bulut kiracınızdan silinir.

Dış tablo oluşturma

Dış tablodaki veriler bulut kiracınızdaki bir yolda depolanır. Unity Kataloğu, dış tablolarla çalışmak için dış bulut depolamaya erişmek ve bunlarla çalışmak için iki nesne sunar:

  • Depolama kimlik bilgileri , bulut depolama konumuna erişmek için bir kimlik doğrulama yöntemi içerir. Depolama kimlik bilgisi, erişim izni verilen yola eşleme içermiyor. Depolama kimlik bilgileri, hangi kullanıcıların kimlik bilgilerini kullanabileceğini belirlemek için erişim denetiminden yapılır.
  • Dış konum , depolama kimlik bilgilerini erişim izni verilen bir bulut depolama yolu ile eşler. Dış konum yalnızca bu bulut depolama yoluna ve içeriğine erişim verir. Dış konumlar, hangi kullanıcıların bunları kullanabileceğini belirlemek için erişim denetimindedir. SQL komutunuz bir LOCATION yan tümce içerdiğinde dış konum otomatik olarak kullanılır.

Gereksinimler

Dış tablo oluşturmak için aşağıdakilere sahip olmanız gerekir:

  • Dış CREATE EXTERNAL TABLE tablo tarafından erişilene LOCATION erişim izni veren bir dış konumdaki ayrıcalık.
  • USE SCHEMA Tablonun üst şeması üzerindeki izin.
  • USE CATALOG Tablonun üst kataloğundaki izin.
  • CREATE TABLE Tablonun üst şeması üzerindeki izin.

Dış konumlar ve depolama kimlik bilgileri, katalog yerine meta veri deposu düzeyinde depolanır. Depolama kimlik bilgileri oluşturmak için hesap yöneticisi olmanız veya ayrıcalığınız CREATE STORAGE CREDENTIAL olması gerekir. Dış konum oluşturmak için meta veri deposu yöneticisi olmanız veya ayrıcalığınız CREATE EXTERNAL LOCATION olması gerekir. Bkz. Unity Kataloğu'nu kullanarak bulut nesne depolamaya Bağlan.

Tablo oluştur

Dış tablo oluşturmak için bir not defterinde veya SQL sorgu düzenleyicisinde aşağıdaki komut örneklerinden birini kullanın.

Ayrıca depolama kimlik bilgilerini, dış konumu ve dış tabloyu oluşturmak ve bunlara yönelik izinleri yönetmek için örnek bir not defteri kullanabilirsiniz.

Aşağıdaki örneklerde yer tutucu değerlerini değiştirin:

  • <catalog>: Tabloyu içerecek kataloğun adı.

    Bu, Azure Databricks çalışma alanınızla ilişkili Hive meta veri deposu için otomatik olarak oluşturulan katalog olamaz hive_metastore . Tabloyu çalışma alanının varsayılan kataloğunda oluşturuyorsanız katalog adını bırakabilirsiniz.

  • <schema>: Tabloyu içerecek şemanın adı.

  • <table-name>: Tablo için bir ad.

  • <column-specification>: Her sütunun adı ve veri türü.

  • <bucket-path>: Tablonun oluşturulacağı bulut depolama demetinin yolu.

  • <table-directory>: Tablonun oluşturulacağı dizin. Her tablo için benzersiz bir dizin kullanın.

Önemli

Bir yolda tablo oluşturulduktan sonra, kullanıcılar artık dış bir konumda veya depolama kimlik bilgileri üzerinde ayrıcalıklar verilmiş olsa bile Azure Databricks'ten bu yoldaki dosyalara doğrudan erişemez. Bu, kullanıcıların bulut kiracınızdaki dosyaları doğrudan okuyarak tablolara uygulanan erişim denetimlerini atlatamamasını sağlamaktır.

SQL

CREATE TABLE <catalog>.<schema>.<table-name>
(
  <column-specification>
)
LOCATION 'abfss://<bucket-path>/<table-directory>';

Python

spark.sql("CREATE TABLE <catalog>.<schema>.<table-name> "
  "("
  "  <column-specification>"
  ") "
  "LOCATION 'abfss://<bucket-path>/<table-directory>'")

R

library(SparkR)

sql(paste("CREATE TABLE <catalog>.<schema>.<table-name> ",
  "(",
  "  <column-specification>",
  ") ",
  "LOCATION 'abfss://<bucket-path>/<table-directory>'",
  sep = ""))

Scala

spark.sql("CREATE TABLE <catalog>.<schema>.<table-name> " +
  "(" +
  "  <column-specification>" +
  ") " +
  "LOCATION 'abfss://<bucket-path>/<table-directory>'")

Unity Kataloğu aşağıdaki izinlere sahip olduğunuzu denetler:

  • CREATE EXTERNAL TABLE öğesini seçin.
  • CREATE TABLE üst şemada.
  • USE SCHEMA üst şemada.
  • USE CATALOG öğesini seçin.

Bunu yaparsanız, dış tablo oluşturulur. Aksi takdirde bir hata oluşur ve dış tablo oluşturulmaz.

Not

Bunun yerine Hive meta veri deposundaki mevcut bir dış tabloyu, verilerini yinelemeden Unity Kataloğu'na geçirebilirsiniz. Bkz . Yükseltme sihirbazını kullanarak tek bir Hive tablosunu Unity Kataloğu dış tablosuna yükseltme.

Databricks Terraform sağlayıcısını ve databricks_table kullanarak da bir dış tablo oluşturabilirsiniz. databricks_tables kullanarak tablo tam adlarının listesini alabilirsiniz.

Örnek not defteri: Dış tablolar oluşturma

Katalog, şema ve dış tablo oluşturmak ve bunlar üzerindeki izinleri yönetmek için aşağıdaki örnek not defterini kullanabilirsiniz.

Unity Kataloğu not defterinde dış tablo oluşturma ve yönetme

Not defterini alma

Bulut kiracınızda depolanan dosyalardan tablo oluşturma

Yönetilen veya dış tabloyu, bulut kiracınızda depolanan dosyalardan alınan kayıtlarla doldurabilirsiniz. Unity Kataloğu bu konumdaki dosyaları okur ve içindekileri tabloya ekler. Unity Kataloğu'nda buna yol tabanlı erişim adı verilir.

Bu bölümdeki örnekleri izleyebilir veya veri ekleme kullanıcı arabirimini kullanabilirsiniz.

Dosyaların içeriğini keşfetme

Bu verilerden tablo oluşturmadan önce bir dış konumda depolanan verileri keşfetmek için Katalog Gezgini'ni veya aşağıdaki komutları kullanabilirsiniz.

Gerekli izinler: Bu konumdaki veri dosyalarının READ FILES listesini döndürmek için bulut depolama yolu ile ilişkilendirilmiş dış konum üzerinde izniniz olmalıdır.

Sql

  1. Bulut depolama yolundaki dosyaları listeleyin:

    LIST 'abfss://<path-to-files>';
    
  2. Belirli bir yoldaki dosyalardaki verileri sorgula:

    SELECT * FROM <format>.`abfss://<path-to-files>`;
    

Python

  1. Bulut depolama yolundaki dosyaları listeleyin:

    display(spark.sql("LIST 'abfss://<path-to-files>'"))
    
  2. Belirli bir yoldaki dosyalardaki verileri sorgula:

    display(spark.read.load("abfss://<path-to-files>"))
    

R

  1. Bulut depolama yolundaki dosyaları listeleyin:

    library(SparkR)
    
    display(sql("LIST 'abfss://<path-to-files>'"))
    
  2. Belirli bir yoldaki dosyalardaki verileri sorgula:

    library(SparkR)
    
    display(loadDF("abfss://<path-to-files>"))
    

Scala

  1. Bulut depolama yolundaki dosyaları listeleyin:

    display(spark.sql("LIST 'abfss://<path-to-files>'"))
    
  2. Belirli bir yoldaki dosyalardaki verileri sorgula:

    display(spark.read.load("abfss://<path-to-files>"))
    

Dosyalardan tablo oluşturma

Yeni bir tablo oluşturmak ve bunu bulut kiracınızdaki veri dosyalarıyla doldurmak için bu bölümdeki örnekleri izleyin.

Not

Bunun yerine Hive meta veri deposundaki mevcut bir dış tabloyu, verilerini yinelemeden Unity Kataloğu'na geçirebilirsiniz. Bkz . Yükseltme sihirbazını kullanarak tek bir Hive tablosunu Unity Kataloğu dış tablosuna yükseltme.

Önemli

  • Bu yöntemi kullanarak bir tablo oluşturduğunuzda, kayıtların çoğaltılmasını önlemek için depolama yolu yalnızca bir kez okunur. Dizinin içeriğini yeniden okumak istiyorsanız tabloyu bırakmanız ve yeniden oluşturmanız gerekir. Mevcut bir tablo için, depolama yolundan kayıt ekleyebilirsiniz.
  • Tablo oluşturduğunuz demet yolu, veri dosyalarını okumak veya yazmak için de kullanılamaz.
  • Yalnızca tam dizindeki dosyalar okunur; okuma özyinelemeli değil.
  • Aşağıdaki izinlere sahip olmanız gerekir:
    • USE CATALOG üst katalogda ve USE SCHEMA şemada.
    • CREATE TABLE üst şemada.
    • READ FILES dosyalarının bulunduğu demet yolu ile ilişkilendirilmiş dış konumda veya dış konum kullanmıyorsanız doğrudan depolama kimlik bilgileri üzerinde.
    • Dış tablo oluşturuyorsanız, tablonun oluşturulacağı demet yolunda olmanız gerekir CREATE EXTERNAL TABLE .

Yeni bir yönetilen tablo oluşturmak ve bunu bulut depolama alanınızdaki verilerle doldurmak için aşağıdaki örnekleri kullanın.

SQL

CREATE TABLE <catalog>.<schema>.<table-name>
(
  <column-specification>
)
SELECT * from <format>.`abfss://<path-to-files>`;

Python

spark.sql("CREATE TABLE <catalog>.<schema>.<table-name> "
  "( "
  "  <column-specification> "
  ") "
  "SELECT * from <format>.`abfss://<path-to-files>`")

R

library(SparkR)

sql(paste("CREATE TABLE <catalog>.<schema>.<table-name> ",
  "( ",
  "  <column-specification> ",
  ") ",
  "SELECT * from <format>.`abfss://<path-to-files>`",
  sep = ""))

Scala

spark.sql("CREATE TABLE <catalog>.<schema>.<table-name> " +
  "( " +
  "  <column-specification> " +
  ") " +
  "SELECT * from <format>.`abfss://<path-to-files>`")

Dış tablo oluşturmak ve bunu bulut depolama alanınızdaki verilerle doldurmak için bir LOCATION yan tümcesi ekleyin:

SQL

CREATE TABLE <catalog>.<schema>.<table-name>
(
    <column-specification>
)
USING <format>
LOCATION 'abfss://<table-location>'
SELECT * from <format>.`abfss://<path-to-files>`;

Python

spark.sql("CREATE TABLE <catalog>.<schema>.<table-name> "
  "( "
  "  <column-specification> "
  ") "
  "USING <format> "
  "LOCATION 'abfss://<table-location>' "
  "SELECT * from <format>.`abfss://<path-to-files>`")

R

library(SparkR)

sql(paste("CREATE TABLE <catalog>.<schema>.<table-name> ",
  "( ",
  "  <column-specification> ",
  ") ",
  "USING <format> ",
  "LOCATION 'abfss://<table-location>' ",
  "SELECT * from <format>.`abfss://<path-to-files>`",
  sep = ""))

Scala

spark.sql("CREATE TABLE <catalog>.<schema>.<table-name> " +
  "( " +
  "  <column-specification> " +
  ") " +
  "USING <format> " +
  "LOCATION 'abfss://<table-location>' " +
  "SELECT * from <format>.`abfss://<path-to-files>`")

Bir yoldan var olan bir tabloya kayıt ekleme

Bir demet yolundan var olan bir tabloya kayıt eklemek için komutunu kullanın COPY INTO . Aşağıdaki örneklerde yer tutucu değerlerini değiştirin:

  • <catalog>: Tablonun üst kataloğunun adı.
  • <schema>: Tablonun üst şemasının adı.
  • <path-to-files>: Veri dosyalarını içeren demet yolu.
  • <format>: Dosyaların biçimi, örneğin delta.
  • <table-location>: Tablonun oluşturulacağı demet yolu.

Önemli

  • Bu yöntemi kullanarak bir tabloya kayıt eklediğinizde, kayıtların yinelenmesini önlemek için sağladığınız demet yolu yalnızca bir kez okunur.
  • Tablo oluşturduğunuz demet yolu, veri dosyalarını okumak veya yazmak için de kullanılamaz.
  • Yalnızca tam dizindeki dosyalar okunur; okuma özyinelemeli değil.
  • Aşağıdaki izinlere sahip olmanız gerekir:
    • USE CATALOG üst katalogda ve USE SCHEMA şemada.
    • MODIFY öğesini seçin.
    • READ FILES dosyalarının bulunduğu demet yolu ile ilişkilendirilmiş dış konumda veya dış konum kullanmıyorsanız doğrudan depolama kimlik bilgileri üzerinde.
    • Dış tabloya kayıt eklemek için, tablonun bulunduğu demet yolunda olmanız gerekir CREATE EXTERNAL TABLE .

Demet yolundaki dosyalardan kayıtları yönetilen tabloya eklemek için, demet yolundan okumak üzere bir dış konum kullanın:

SQL

COPY INTO <catalog>.<schema>.<table>
FROM (
  SELECT *
  FROM 'abfss://<path-to-files>'
)
FILEFORMAT = <format>;

Python

spark.sql("COPY INTO <catalog>.<schema>.<table> "
  "FROM ( "
  "  SELECT * "
  "  FROM 'abfss://<path-to-files>' "
  ") "
  "FILEFORMAT = <format>")

R

library(SparkR)

sql(paste("COPY INTO <catalog>.<schema>.<table> ",
  "FROM ( ",
  "  SELECT * ",
  "  FROM 'abfss://<path-to-files>' ",
  ") ",
  "FILEFORMAT = <format>",
  sep = ""))

Scala

spark.sql("COPY INTO <catalog>.<schema>.<table> " +
  "FROM ( " +
  "  SELECT * " +
  "  FROM 'abfss://<path-to-files>' " +
  ") " +
  "FILEFORMAT = <format>")

Dış tabloya eklemek için bir LOCATION yan tümce ekleyin:

SQL

COPY INTO <catalog>.<schema>.<table>
LOCATION 'abfss://<table-location>'
FROM (
  SELECT *
  FROM 'abfss://<path-to-files>'
)
FILEFORMAT = <format>;

Python

spark.sql("COPY INTO <catalog>.<schema>.<table> "
  "LOCATION 'abfss://<table-location>' "
  "FROM ( "
  "  SELECT * "
  "  FROM 'abfss://<path-to-files>' "
  ") "
  "FILEFORMAT = <format>")

R

library(SparkR)

sql(paste("COPY INTO <catalog>.<schema>.<table> ",
  "LOCATION 'abfss://<table-location>' ",
  "FROM ( ",
  "  SELECT * ",
  "  FROM 'abfss://<path-to-files>' ",
  ") ",
  "FILEFORMAT = <format>",
  sep = ""))

Scala

spark.sql("COPY INTO <catalog>.<schema>.<table> " +
  "LOCATION 'abfss://<table-location>' " +
  "FROM ( " +
  "  SELECT * " +
  "  FROM 'abfss://<path-to-files>' " +
  ") " +
  "FILEFORMAT = <format>")

Tabloya açıklama ekleme

Tablo sahibi veya tablo üzerinde ayrıcalığı olan MODIFY bir kullanıcı olarak, tabloya ve sütunlarına açıklamalar ekleyebilirsiniz. Aşağıdaki işlevleri kullanarak açıklamalar ekleyebilirsiniz:

  • COMMENT ON komutu. Bu seçenek sütun açıklamalarını desteklemez.
  • COMMENT CREATE TABLE ve ALTER TABLE komutlarını kullanma seçeneği. Bu seçenek sütun açıklamalarını destekler.
  • Katalog Gezgini'ndeki "el ile" açıklama alanı. Bu seçenek sütun açıklamalarını destekler. Bkz . Markdown açıklamalarını kullanarak Katalog Gezgini'nde belge verileri.
  • Katalog Gezgini'nde yapay zeka tarafından oluşturulan açıklamalar (yapay zeka tarafından oluşturulan belgeler olarak da bilinir). Tablo şeması ve sütun adları gibi tablo meta verilerini dikkate alan büyük bir dil modeli (LLM) tarafından önerilen bir açıklamayı görüntüleyebilir ve açıklamayı eklemek için olduğu gibi düzenleyebilir veya kabul edebilirsiniz. Bkz. Tabloya yapay zeka tarafından oluşturulan açıklamalar ekleme.

Sonraki adımlar