Membuat tabel di Katalog Unity

Artikel ini memperkenalkan konsep tabel terkelola dan eksternal di Unity Catalog dan menjelaskan cara membuat tabel di Unity Catalog.

Catatan

Saat Anda membuat tabel, pastikan untuk mereferensikan katalog yang diatur oleh Katalog Unity atau atur katalog default ke katalog yang diatur oleh Katalog Unity. Lihat Mengelola katalog default.

Katalog hive_metastore muncul di Catalog Explorer tetapi tidak dianggap diatur oleh Katalog Unity. Ini dikelola oleh metastore Apache Hive ruang kerja Azure Databricks Anda. Semua katalog lain yang tercantum diatur oleh Katalog Unity.

Anda dapat menggunakan antarmuka peningkatan tabel Katalog Unity untuk meningkatkan tabel yang ada yang terdaftar di metastore Apache Hive ke Katalog Unity. Lihat Meningkatkan tabel dan tampilan Apache Hive ke Katalog Unity.

Tabel terkelola

Tabel terkelola adalah cara default untuk membuat tabel di Katalog Unity. Katalog Unity mengelola siklus hidup dan tata letak file untuk tabel ini. Anda tidak boleh menggunakan alat di luar Azure Databricks untuk memanipulasi file dalam tabel ini secara langsung.

Tabel terkelola disimpan dalam penyimpanan terkelola, baik di tingkat metastore, katalog, atau skema, tergantung pada bagaimana skema dan katalog dikonfigurasi. Lihat Menentukan lokasi penyimpanan terkelola di Katalog Unity.

Tabel terkelola selalu menggunakan format tabel Delta .

Saat tabel terkelola dihapus, data yang mendasarinya akan dihapus dari penyewa cloud Anda dalam 30 hari.

Tabel eksternal

Tabel eksternal adalah tabel yang datanya disimpan di luar lokasi penyimpanan terkelola yang ditentukan untuk metastore, katalog, atau skema. Gunakan tabel eksternal hanya saat Anda memerlukan akses langsung ke data di luar kluster Azure Databricks atau gudang Databricks SQL.

Saat Anda menjalankan DROP TABLE pada tabel eksternal, Katalog Unity tidak menghapus data yang mendasarinya. Untuk menjatuhkan tabel, Anda harus menjadi pemiliknya. Anda dapat mengelola hak istimewa pada tabel eksternal dan menggunakannya dalam kueri dengan cara yang sama seperti tabel terkelola. Untuk membuat tabel eksternal dengan SQL, tentukan jalur LOCATION dalam pernyataan CREATE TABLE. Tabel eksternal dapat menggunakan format file berikut:

  • DELTA
  • CSV
  • JSON
  • AVRO
  • PARKET
  • ORC
  • TEXT

Untuk mengelola akses ke penyimpanan cloud yang mendasari untuk tabel eksternal, Anda harus menyiapkan kredensial penyimpanan dan lokasi eksternal.

Untuk mempelajari selengkapnya, lihat Membuat tabel eksternal.

Persyaratan

Anda harus memiliki CREATE TABLE hak istimewa pada skema tempat Anda ingin membuat tabel, serta USE SCHEMA hak istimewa pada skema dan USE CATALOG hak istimewa pada katalog induk.

Jika Anda membuat tabel eksternal, lihat Membuat tabel eksternal untuk persyaratan tambahan.

Membuat tabel terkelola

Untuk membuat tabel terkelola, jalankan perintah SQL berikut. Anda juga dapat menggunakan contoh notebook untuk membuat tabel. Item dalam tanda kurung bersifat opsional. Ganti nilai tempat penampung:

  • <catalog-name>: Nama katalog yang akan berisi tabel..

    Ini tidak boleh menjadi hive_metastore katalog yang dibuat secara otomatis untuk metastore Apache Hive yang terkait dengan ruang kerja Azure Databricks Anda. Anda dapat menghilangkan nama katalog jika Anda membuat tabel di katalog default ruang kerja.

  • <schema-name>: Nama skema yang akan berisi tabel..

  • <table-name>: Nama tabel.

  • <column-specification>: Nama dan jenis data untuk setiap kolom.

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>" +
  ")")

Anda juga dapat membuat tabel terkelola dengan menggunakan penyedia Databricks Terraform dan databricks_table. Anda dapat mengambil daftar nama lengkap tabel dengan menggunakan databricks_tables.

Misalnya, untuk membuat tabel main.default.department dan menyisipkan lima baris ke dalamnya:

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')")

Contoh buku catatan: Membuat tabel terkelola

Anda dapat menggunakan notebook contoh berikut untuk membuat katalog, skema, dan tabel terkelola, serta mengelola izinnya.

Membuat dan mengelola tabel di Katalog Unity menggunakan buku catatan Python

Dapatkan buku catatan

Membuat dan mengelola tabel di Katalog Unity menggunakan buku catatan SQL

Dapatkan buku catatan

Menghapus tabel terkelola

Anda harus menjadi pemilik tabel untuk menjatuhkan tabel. Untuk menghilangkan tabel terkelola, jalankan perintah SQL berikut:

DROP TABLE IF EXISTS catalog_name.schema_name.table_name;

Saat tabel terkelola dihapus, data yang mendasarinya akan dihapus dari penyewa cloud Anda dalam 30 hari.

Membuat tabel eksternal

Data dalam tabel eksternal disimpan dalam jalur di penyewa cloud Anda. Untuk bekerja dengan tabel eksternal, Unity Catalog memperkenalkan dua objek untuk mengakses dan bekerja dengan penyimpanan cloud eksternal:

  • Kredensial penyimpanan berisi metode autentikasi untuk mengakses lokasi penyimpanan cloud. Kredensial penyimpanan tidak berisi pemetaan ke jalur yang diberikan aksesnya. Kredensial penyimpanan dikontrol oleh akses untuk menentukan pengguna mana yang dapat menggunakan kredensial.
  • Lokasi eksternal memetakan kredensial penyimpanan dengan jalur penyimpanan cloud yang diberikan aksesnya. Lokasi eksternal hanya memberikan akses ke jalur penyimpanan cloud dan isinya. Lokasi eksternal dikontrol oleh akses untuk menentukan pengguna mana yang dapat menggunakannya. Lokasi eksternal digunakan secara otomatis saat perintah SQL Anda berisi LOCATION klausa.

Persyaratan

Untuk membuat tabel eksternal, Anda harus memiliki:

  • Hak CREATE EXTERNAL TABLE istimewa pada lokasi eksternal yang memberikan akses ke LOCATION tabel eksternal yang diakses.
  • Izin USE SCHEMA pada skema induk tabel.
  • Izin USE CATALOG pada katalog induk tabel.
  • Izin CREATE TABLE pada skema induk tabel.

Lokasi eksternal dan kredensial penyimpanan disimpan di tingkat metastore, bukan di katalog. Untuk membuat kredensial penyimpanan, Anda harus menjadi admin akun atau memiliki CREATE STORAGE CREDENTIAL hak istimewa. Untuk membuat lokasi eksternal, Anda harus menjadi admin metastore atau memiliki CREATE EXTERNAL LOCATION hak istimewa. Lihat Koneksi ke penyimpanan objek cloud menggunakan Unity Catalog.

Buat tabel

Gunakan salah satu contoh perintah berikut di buku catatan atau editor kueri SQL untuk membuat tabel eksternal.

Anda juga bisa menggunakan contoh buku catatan untuk membuat kredensial penyimpanan, lokasi eksternal, dan tabel eksternal, dan juga mengelola izin untuk mereka.

Dalam contoh berikut, ubah nilai tempat penampung:

  • <catalog>: Nama katalog yang akan menampung tabel.

    Ini tidak boleh menjadi hive_metastore katalog yang dibuat secara otomatis untuk metastore Apache Hive yang terkait dengan ruang kerja Azure Databricks Anda. Anda dapat menghilangkan nama katalog jika Anda membuat tabel di katalog default ruang kerja.

  • <schema>: Nama skema yang akan menampung tabel.

  • <table-name>: Nama tabel.

  • <column-specification>: Nama dan jenis data untuk setiap kolom.

  • <bucket-path>: Jalur ke wadah penyimpanan cloud tempat tabel akan dibuat.

  • <table-directory>: Direktori tempat tabel akan dibuat. Gunakan direktori unik untuk setiap tabel.

Penting

Setelah tabel dibuat di jalur, pengguna tidak dapat lagi langsung mengakses file di jalur tersebut dari Azure Databricks bahkan jika mereka telah diberikan hak istimewa di lokasi eksternal atau kredensial penyimpanan untuk melakukannya. Hal ini untuk memastikan bahwa pengguna tidak dapat menghindari kontrol akses yang diterapkan ke tabel dengan membaca file dari penyewa cloud Anda secara langsung.

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>'")

Katalog Unity memeriksa apakah Anda memiliki izin berikut:

  • CREATE EXTERNAL TABLE di lokasi eksternal yang mereferensikan jalur penyimpanan cloud yang Anda tentukan.
  • CREATE TABLE pada skema induk.
  • USE SCHEMA pada skema induk.
  • USE CATALOG pada katalog induk.

Jika Anda melakukannya, tabel eksternal dibuat. Jika tidak, terjadi kesalahan dan tabel eksternal tidak akan dibuat.

Catatan

Anda dapat memigrasikan tabel eksternal yang ada di metastore Hive ke Katalog Unity tanpa menduplikasi datanya. Lihat Meningkatkan satu tabel Apache Hive ke tabel eksternal Unity Catalog menggunakan wizard pemutakhiran.

Anda juga dapat membuat tabel eksternal dengan menggunakan penyedia Databricks Terraform dan databricks_table. Anda dapat mengambil daftar nama lengkap tabel dengan menggunakan databricks_tables.

Contoh buku catatan: Membuat tabel eksternal

Anda bisa menggunakan contoh buku catatan berikut untuk membuat katalog, skema, dan tabel eksternal, dan untuk mengelola izin pada buku catatan tersebut.

Membuat dan mengelola tabel eksternal di buku catatan Katalog Unity

Dapatkan buku catatan

Membuat tabel dari file yang disimpan di penyewa cloud Anda

Anda dapat mengisi tabel terkelola atau eksternal dengan catatan dari file yang disimpan di penyewa cloud Anda. Unity Catalog membaca file di lokasi tersebut dan memasukkan isinya ke dalam tabel. Di Katalog Unity, hal ini disebut akses berbasis jalur.

Anda dapat mengikuti contoh di bagian ini atau menggunakan UI tambahkan data.

Menjelajahi isi file

Untuk menjelajahi data yang disimpan di lokasi eksternal sebelum membuat tabel dari data tersebut, Anda bisa menggunakan Catalog Explorer atau perintah berikut.

Izin yang diperlukan: Anda harus memiliki READ FILES izin di lokasi eksternal yang terkait dengan jalur penyimpanan cloud untuk mengembalikan daftar file data di lokasi tersebut.

Sql

  1. Cantumkan file di jalur penyimpanan cloud:

    LIST 'abfss://<path-to-files>';
    
  2. Buat kueri data dalam file di jalur tertentu:

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

Python

  1. Cantumkan file di jalur penyimpanan cloud:

    display(spark.sql("LIST 'abfss://<path-to-files>'"))
    
  2. Buat kueri data dalam file di jalur tertentu:

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

R

  1. Cantumkan file di jalur penyimpanan cloud:

    library(SparkR)
    
    display(sql("LIST 'abfss://<path-to-files>'"))
    
  2. Buat kueri data dalam file di jalur tertentu:

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

Scala

  1. Cantumkan file di jalur penyimpanan cloud:

    display(spark.sql("LIST 'abfss://<path-to-files>'"))
    
  2. Buat kueri data dalam file di jalur tertentu:

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

Membuat tabel dari daftar

Ikuti contoh di bagian ini untuk membuat tabel baru dan mengisinya dengan file data di penyewa cloud Anda.

Catatan

Anda dapat memigrasikan tabel eksternal yang ada di metastore Hive ke Katalog Unity tanpa menduplikasi datanya. Lihat Meningkatkan satu tabel Apache Hive ke tabel eksternal Unity Catalog menggunakan wizard pemutakhiran.

Penting

  • Saat Anda membuat tabel menggunakan metode ini, jalur penyimpanan hanya dibaca sekali, untuk mencegah duplikasi catatan. Jika Anda ingin membaca ulang isi direktori, Anda harus menghapus dan membuat ulang tabel. Untuk tabel yang sudah ada, Anda dapat menyisipkan catatan dari jalur penyimpanan.
  • Jalur bucket tempat Anda membuat tabel tidak dapat digunakan juga untuk membaca atau menulis file data.
  • Hanya file di direktori yang tepat yang dibaca; bacaan tidak rekursif.
  • Anda harus memiliki izin berikut:
    • USE CATALOG pada katalog induk dan USE SCHEMA pada skema.
    • CREATE TABLE pada skema induk.
    • READ FILES di lokasi eksternal yang terkait dengan jalur bucket tempat file berada, atau langsung pada kredensial penyimpanan jika Anda tidak menggunakan lokasi eksternal.
    • Jika Anda membuat tabel eksternal, Anda perlu CREATE EXTERNAL TABLE di jalur bucket tempat tabel akan dibuat.

Untuk membuat tabel terkelola baru dan mengisinya dengan data di penyimpanan cloud Anda, gunakan contoh berikut.

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>`")

Untuk membuat tabel eksternal dan mengisinya dengan data di penyimpanan cloud Anda, tambahkan LOCATION klausa:

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>`")

Menyisipkan catatan dari jalur ke dalam tabel yang sudah ada

Untuk menyisipkan catatan dari jalur bucket ke dalam tabel yang sudah ada, gunakan perintah COPY INTO. Dalam contoh berikut, ubah nilai tempat penampung:

  • <catalog>: Nama katalog induk tabel.
  • <schema>: Nama skema induk tabel.
  • <path-to-files>: Jalur bucket yang berisi file data.
  • <format>: Format file, misalnya delta.
  • <table-location>: Jalur bucket tempat tabel akan dibuat.

Penting

  • Saat Anda menyisipkan catatan ke dalam tabel menggunakan metode ini, jalur bucket yang Anda berikan hanya dibaca sekali, untuk mencegah duplikasi catatan.
  • Jalur bucket tempat Anda membuat tabel tidak dapat digunakan juga untuk membaca atau menulis file data.
  • Hanya file di direktori yang tepat yang dibaca; bacaan tidak rekursif.
  • Anda harus memiliki izin berikut:
    • USE CATALOG pada katalog induk dan USE SCHEMA pada skema.
    • MODIFY di tabel.
    • READ FILES di lokasi eksternal yang terkait dengan jalur bucket tempat file berada, atau langsung pada kredensial penyimpanan jika Anda tidak menggunakan lokasi eksternal.
    • Untuk menyisipkan catatan ke dalam tabel eksternal, Anda perlu CREATE EXTERNAL TABLE di jalur bucket tempat tabel berada.

Untuk menyisipkan catatan dari file dalam jalur bucket ke dalam tabel terkelola, menggunakan lokasi eksternal untuk membaca dari jalur bucket:

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>")

Untuk menyisipkan ke dalam tabel eksternal, tambahkan klausa LOCATION:

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>")

Menambahkan komentar ke tabel

Sebagai pemilik tabel atau pengguna dengan MODIFY hak istimewa pada tabel, Anda bisa menambahkan komentar ke tabel dan kolomnya. Anda dapat menambahkan komentar menggunakan fungsionalitas berikut:

Langkah berikutnya