Tabel metadata berbagi Azure Synapse Analytics
Azure Synapse Analytics memungkinkan berbagai mesin komputasi ruang kerja berbagi database dan tabel antara kumpulan Apache Spark dan kumpulan SQL tanpa server.
Setelah database dibuat oleh pekerjaan Spark, Anda dapat membuat tabel di dalamnya dengan Spark yang menggunakan Parquet, Delta atau CSV sebagai format penyimpanan. Nama tabel akan dikonversi menjadi huruf kecil dan perlu dikueri menggunakan nama huruf kecil. Tabel ini akan segera tersedia untuk dikueri oleh salah satu kumpulan Spark ruang kerja Azure Synapse. Tabel tersebut juga dapat digunakan dari salah satu pekerjaan Spark yang patuh pada izin.
Tabel Spark yang dibuat, dikelola, dan eksternal juga tersedia sebagai tabel eksternal dengan nama yang sama dalam database tersinkron terkait di kumpulan SQL tanpa server. Mengekspos tabel Spark di SQL memberikan detail selengkapnya tentang sinkronisasi tabel.
Karena tabel disinkronkan ke kumpulan SQL tanpa server secara asinkron, akan ada sedikit penundaan hingga tabel muncul.
Mengelola tabel yang dibuat Spark
Gunakan Spark untuk mengelola database yang dibuat Spark. Misalnya, hapus melalui pekerjaan kumpulan Apache Spark tanpa server, dan buat tabel di dalamnya dari Spark.
Objek dalam database yang disinkronkan tidak dapat dimodifikasi dari kumpulan SQL tanpa server.
Mengekspos tabel Spark di SQL
Tabel Spark berbagi
Spark menyediakan dua jenis tabel yang diekspos Azure Synapse di SQL secara otomatis:
Tabel terkelola
Spark menyediakan banyak opsi cara menyimpan data dalam tabel terkelola, seperti TEXT, CSV, JSON, JDBC, PARQUET, ORC, HIVE, DELTA, dan LIBSVM. File-file ini biasanya disimpan dalam direktori
warehouse
tempat data tabel terkelola disimpan.Tabel eksternal
Spark juga menyediakan cara untuk membuat tabel eksternal di atas data yang ada, baik dengan menyediakan opsi
LOCATION
atau menggunakan format Apache Hive. Tabel eksternal tersebut dapat terdiri dari berbagai format data, termasuk Parquet.
Azure Synapse saat ini hanya berbagi tabel Spark terkelola dan eksternal yang menyimpan data dalam format Parquet, DELTA atau CSV dengan mesin SQL. Tabel yang didukung oleh format lain tidak disinkronkan secara otomatis. Anda dapat menyinkronkan tabel tersebut secara eksplisit sebagai tabel eksternal di database SQL Anda sendiri jika mesin SQL mendukung format yang mendasar tabel.
Catatan
Saat ini, hanya format Parquet dan CSV yang disinkronkan ke kumpulan SQL tanpa server. Tabel Spark Delta juga tersedia di kumpulan SQL tanpa server, tetapi fitur ini ada di pratinjau umum. Tabel eksternal yang dibuat di Spark tidak tersedia dalam database kumpulan SQL khusus.
Tabel berbagi Spark
Tabel Spark terkelola dan eksternal yang dapat dibagikan diekspos di mesin SQL sebagai tabel eksternal dengan properti berikut:
- Sumber data tabel eksternal SQL adalah sumber data yang mewakili folder lokasi tabel Spark.
- Format file tabel eksternal SQL adalah Parquet, Delta atau CSV.
- Informasi masuk akses tabel eksternal SQL adalah pass-through.
Karena semua nama tabel Spark adalah nama tabel SQL yang valid dan semua nama kolom Spark adalah nama kolom SQL yang valid, nama tabel dan kolom Spark akan digunakan untuk tabel eksternal SQL.
Tabel Spark menyediakan jenis data yang berbeda dari mesin Synapse SQL. Peta tabel berikut Ini memetakan jenis data tabel Spark ke jenis SQL:
Tipe data Spark | Tipe data SQL | Komentar |
---|---|---|
LongType , , long bigint |
bigint |
Spark: LongType mewakili angka bilangan bulat bertanda dengan ukuran 8 byte. SQL: Lihat int, bigint, smallint, and tinyint. |
BooleanType , boolean |
bit (Parquet), varchar(6) (CSV) |
Spark: Boolean. SQL: Lihat [/sql/t-sql/data-types/bit-transact-sql). |
DecimalType , , decimal dec ,numeric |
decimal |
Spark: DecimalType mewakili angka desimal bertanda dengan presisi acak. Didukung secara internal oleh java.math.BigDecimal. BigDecimal terdiri dari nilai bilangan bulat presisi acak yang tidak diskalakan dan skala bilangan bulat 32 bit. SQL: Presisi tetap dan angka skala. Ketika presisi maksimum digunakan, nilai yang valid meliputi - 10^38 +1 hingga 10^38 - 1. Sinonim ISO untuk desimal adalah dec dan dec(p, s). numerik secara fungsional identik dengan desimal. Lihat desimal dan numerik. |
IntegerType , , Integer int |
int |
Spark IntegerType mewakili 4 angka bilangan bulat bertanda tangan byte. SQL: Lihat int, bigint, smallint, and tinyint. |
ByteType , , Byte tinyint |
smallint |
Spark: ByteType mewakili 1 angka bilangan bulat bertanda tangan byte [-128 hingga 127] dan ShortType mewakili 2 angka bilangan bulat bertanda tangan byte [-32768 hingga 32767]. SQL: Tinyint mewakili 1 angka bilangan bulat bertanda tangan byte [0, 255] dan smallint mewakili 2 angka bilangan bulat bertanda tangan byte [-32768, 32767]. Lihat int, bigint, smallint, dan tinyint. |
ShortType , , Short smallint |
smallint |
Sama dengan atas. |
DoubleType , Double |
float |
Spark: DoubleType mewakili angka titik mengambang presisi ganda berukuran 8 byte. SQL: Lihat float dan nyata. |
FloatType , , float real |
real |
Spark: FloatType mewakili angka titik mengambang presisi ganda berukuran 4 byte. SQL: Lihat float dan nyata. |
DateType , date |
date |
Spark: DateType mewakili nilai yang terdiri dari nilai bidang tahun, bulan, dan hari, tanpa zona waktu. SQL: Lihat tanggal. |
TimestampType , timestamp |
datetime2 |
Spark: TimestampType mewakili nilai yang terdiri dari berbagai nilai kolom tahun, bulan, hari, jam, menit, dan detik, dengan zona waktu lokal sesi. Nilai tanda waktu mewakili titik waktu absolut. SQL: Lihat datetime2. |
char |
char |
|
StringType , , String varchar |
Varchar(n) |
Spark: StringType mewakili nilai string karakter. VarcharType(n) adalah varian dari StringType yang memiliki batasan panjang. Penulisan data akan gagal jika string input melebihi batasan panjang. Jenis ini hanya dapat digunakan dalam skema tabel, bukan fungsi/operator. CharType(n) adalah varian dari VarcharType(n) yang panjangnya tetap. Kolom baca jenis CharType(n) selalu menampilkan nilai string dengan panjang n. Perbandingan kolom CharType(n) akan menambahkan kolom yang pendek ke kolom yang lebih panjang. SQL: Jika terdapat panjang yang disediakan dari Spark, n dalam varchar(n) akan diatur ke panjang tersebut. Jika kolom dipartisi, n bisa maksimal 2048. Jika tidak, panjangnya akan menjadi varchar(maks). Lihat char dan varchar. Gunakan dengan kolase Latin1_General_100_BIN2_UTF8 . |
BinaryType , binary |
varbinary(n) |
SQL: Jika terdapat panjang yang disediakan dari, n dalam varchar(n) akan diatur ke panjang tersebut. Jika kolom dipartisi, n bisa maksimal 2048. Jika tidak, panjangnya akan menjadi Varbinary(maks). Lihat biner dan varbinary. |
array , , map struct |
varchar(max) |
SQL: Menserialkan ke JSON dengan kolase Latin1_General_100_BIN2_UTF8 . Lihat Data JSON. |
Catatan
Kolase tingkat database adalah Latin1_General_100_CI_AS_SC_UTF8
.
Model keamanan
Database dan tabel Spark, dan representasi yang disinkronkan di mesin SQL akan diamankan pada tingkat penyimpanan yang mendasar. Karena saat ini tidak memiliki izin pada objek itu sendiri, objek dapat dilihat di penjelajah objek.
Keamanan utama yang membuat tabel terkelola dianggap sebagai pemilik tabel tersebut dan memiliki semua hak atas tabel serta folder dan file yang mendasarinya. Selain itu, pemilik database akan menjadi pemilik bersama tabel secara otomatis.
Jika Anda membuat tabel eksternal Spark atau SQL dengan autentikasi pass-through, data hanya diamankan di tingkat folder dan file. Jika seseorang meminta jenis tabel eksternal ini, identitas keamanan pengirim kueri diwariskan ke sistem file, yang akan memeriksa hak akses.
Untuk mengetahui informasi selengkapnya tentang cara mengatur izin pada folder dan file, lihat database berbagi Azure Synapse Analytics.
Contoh
Membuat tabel terkelola yang di Spark dan kueri dari kumpulan SQL tanpa server
Dalam skenario ini, Anda memiliki database Spark bernama mytestdb
. Lihat Membuat dan menyambungkan ke database Spark dengan kumpulan SQL tanpa server.
Buat tabel Spark terkelola dengan SparkSQL dengan menjalankan perintah berikut ini:
CREATE TABLE mytestdb.myparquettable(id int, name string, birthdate date) USING Parquet
Perintah ini membuat tabel myparquettable
dalam database mytestdb
. Nama tabel akan dikonversi menjadi huruf kecil. Setelah penundaan singkat, Anda dapat melihat tabel di kumpulan SQL tanpa server Anda. Misalnya, jalankan pernyataan berikut dari kumpulan SQL tanpa server Anda.
USE mytestdb;
SELECT * FROM sys.tables;
Verifikasi apakah myparquettable
disertakan dalam hasil.
Catatan
Tabel yang tidak menggunakan Parquet, Delta atau CSV sebagai format penyimpanannya tidak akan disinkronkan.
Berikutnya, sisipkan beberapa nilai ke dalam tabel dari Spark, misalnya dengan pernyataan C# Spark berikut ini di buku catatan C#:
using Microsoft.Spark.Sql.Types;
var data = new List<GenericRow>();
data.Add(new GenericRow(new object[] { 1, "Alice", new Date(2010, 1, 1)}));
data.Add(new GenericRow(new object[] { 2, "Bob", new Date(1990, 1, 1)}));
var schema = new StructType
(new List<StructField>()
{
new StructField("id", new IntegerType()),
new StructField("name", new StringType()),
new StructField("birthdate", new DateType())
}
);
var df = spark.CreateDataFrame(data, schema);
df.Write().Mode(SaveMode.Append).InsertInto("mytestdb.myparquettable");
Sekarang Anda dapat membaca data dari kumpulan SQL tanpa server Anda sebagai berikut:
SELECT * FROM mytestdb.myparquettable WHERE name = 'Alice';
Anda akan mendapatkan baris berikut sebagai hasilnya:
id | name | birthdate
---+-------+-----------
1 | Alice | 2010-01-01
Membuat tabel eksternal di Spark dan kueri dari kumpulan SQL tanpa server
Dalam contoh ini, kita akan membuat tabel Spark eksternal melalui file data Parquet yang dibuat dalam contoh sebelumnya untuk tabel terkelola.
Misalnya, dengan SparkSQL jalankan:
CREATE TABLE mytestdb.myexternalparquettable
USING Parquet
LOCATION "abfss://<storage-name>.dfs.core.windows.net/<fs>/synapse/workspaces/<synapse_ws>/warehouse/mytestdb.db/myparquettable/"
Ganti tempat penampung <storage-name>
dengan nama akun penyimpanan ADLS Gen2 yang Anda gunakan, <fs>
dengan nama sistem file yang Anda gunakan dan tempat penampung <synapse_ws>
dengan nama ruang kerja Azure Synapse yang Anda gunakan untuk menjalankan contoh ini.
Contoh sebelumnya membuat tabel myextneralparquettable
dalam database mytestdb
. Setelah penundaan singkat, Anda dapat melihat tabel di kumpulan SQL tanpa server Anda. Misalnya, jalankan pernyataan berikut dari kumpulan SQL tanpa server Anda.
USE mytestdb;
SELECT * FROM sys.tables;
Verifikasi apakah myexternalparquettable
disertakan dalam hasil.
Sekarang Anda dapat membaca data dari kumpulan SQL tanpa server Anda sebagai berikut:
SELECT * FROM mytestdb.dbo.myexternalparquettable WHERE name = 'Alice';
Anda akan mendapatkan baris berikut sebagai hasilnya:
id | name | birthdate
---+-------+-----------
1 | Alice | 2010-01-01