Menyerap data ke Gudang Anda menggunakan Transact-SQL

Diterapkan pada:✅ Gudang di Microsoft Fabric

Bahasa Transact-SQL menawarkan opsi yang dapat Anda gunakan untuk memuat data dalam skala besar dari tabel yang ada di lakehouse dan gudang Anda ke tabel baru di gudang Anda. Opsi ini nyaman jika Anda perlu membuat versi baru tabel dengan data agregat, versi tabel dengan subset baris, atau untuk membuat tabel sebagai hasil dari kueri kompleks. Mari kita jelajahi beberapa contoh.

Membuat tabel baru dengan hasil kueri

Gudang di Microsoft Fabric memungkinkan Anda membuat tabel baru dengan mudah berdasarkan hasil kueri T-SQL, menggunakan pernyataan T-SQL berikut:

  • CREATE TABLE AS SELECT Pernyataan (CTAS) yang memungkinkan Anda membuat tabel baru di gudang Anda dari output SELECT pernyataan.
  • SELECT INTO klausa kueri yang memungkinkan Anda memilih hasil dari sumber tabel mana pun, dan mengalihkan hasilnya ke tabel baru. Ini adalah fitur standar dalam bahasa T-SQL.

Kedua pernyataan ini serupa, sehingga contoh berikut difokuskan pada pernyataan CTAS.

Pernyataan CTAS menjalankan operasi penyerapan ke dalam tabel baru secara paralel, membuatnya sangat efisien untuk transformasi data dan pembuatan tabel baru di ruang kerja Anda.

Anda dapat menggunakan opsi berikut untuk bagian SELECT pernyataan CTAS:

  • Membaca tabel gudang, seperti tabel penahapan.
  • Membaca folder Lakehouse Delta Lake menggunakan tabel yang dibuat secara otomatis di titik akhir analitik SQL untuk Lakehouse.
  • Membaca file CSV, Parquet, atau JSONL langsung dari Azure Data Lake atau penyimpanan Azure Blob menggunakan fungsi OPENROWSET.

Untuk memuat himpunan data sampel, ikuti langkah-langkah dalam Menyerap data ke gudang Anda menggunakan pernyataan COPY untuk membuat data sampel ke gudang Anda.

Membuat tabel dari tabel Gudang

Contoh pertama memperlihatkan cara membuat tabel baru yang merupakan salinan tabel yang sudah ada dbo.TaxiTrips , tetapi difilter untuk menyertakan hanya data dari tahun 2023:

CREATE TABLE dbo.TaxiTrips_2023
AS
SELECT * 
FROM dbo.TaxiTrips 
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';

Membuat tabel dari folder Delta Lake

Folder Delta Lake yang bertahan di OneLake secara otomatis diwakili sebagai tabel jika disimpan di folder /Tables di lakehouse. Kode berikut membuat tabel TaxiTrips_2023 baru dari folder /Tables/TaxiTrips Delta Lake di lakehouse MyLakehouse :

CREATE TABLE dbo.TaxiTrips_2023
AS
SELECT * 
FROM MyLakehouse.dbo.TaxiTrips 
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';

Anda dapat mereferensikan folder Delta Lake menggunakan notasi tiga nama bagian yang mereferensikan lakehouse tempat file disimpan. Semua contoh yang ditampilkan di bagian sebelumnya berlaku untuk folder Delta Lake.

Membuat tabel dari file CSV/Parquet/JSONL

Anda juga dapat membuat tabel baru langsung dari file eksternal dengan menggunakan OPENROWSET fungsi . Misalnya, contoh T-SQL berikut menggunakan placeholder untuk mendemonstrasikan cara mengimpor file Parquet publik.

CREATE TABLE dbo.<table_name>
AS
SELECT *
FROM OPENROWSET(BULK 'https://<storage account>.blob.core.windows.net/public/<subfolder>/<file name>.parquet') AS data;

Anda dapat membuat tabel baru dengan mengubah data dari file CSV eksternal yang tersedia untuk umum:

CREATE TABLE dbo.<table name>
AS
SELECT *
FROM OPENROWSET(BULK 'https://<storage account>.blob.core.windows.net/public/<subfolder>/<file name>.csv') AS data;

Atau, Anda dapat membuat tabel baru dengan mengubah data dari file JSONL eksternal yang tersedia untuk umum:

CREATE TABLE dbo.<table name>
AS
SELECT *
FROM OPENROWSET(BULK 'https://<storage account>.blob.core.windows.net/public/<subfolder>/<file name>.jsonl') AS data;

Menyerap data ke dalam tabel yang ada dengan kueri T-SQL

Contoh sebelumnya membuat tabel baru berdasarkan hasil kueri. Untuk mereplikasi contoh tetapi pada tabel yang ada, pola INSERT ... SELECT dapat digunakan.

Mengambil data dari tabel Gudang

Kode berikut menyerap data baru dari tabel gudang ke dalam tabel yang sudah ada:

INSERT INTO dbo.TaxiTrips_2023
SELECT *
FROM dbo.TaxiTrips
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';

Kriteria kueri untuk SELECT pernyataan bisa berupa kueri yang valid, selama tipe kolom kueri yang dihasilkan selaras dengan kolom pada tabel tujuan. Jika nama kolom ditentukan dan hanya menyertakan subset kolom dari tabel tujuan, semua kolom lain dimuat sebagai NULL. Untuk informasi selengkapnya, lihat Menggunakan INSERT INTO... SELECT untuk Mengimpor data secara massal dengan pengelogan dan paralelisme minimal.

Menyerap data dari folder Delta Lake

Folder Delta Lake yang bertahan di OneLake secara otomatis direpresentasikan sebagai tabel jika disimpan dalam /Tables folder di lakehouse.

Kode berikut mengimpor data baru dari bagian folder Delta Lake /Tables/TaxiTrips di lakehouse MyLakehouse*.

INSERT INTO dbo.TaxiTrips_2023
SELECT *
FROM MyLakehouse.dbo.TaxiTrips 
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';

Menyerap data dari file CSV/Parquet/JSONL

Anda dapat menggunakan OPENROWSET fungsi sebagai sumber untuk menyerap file Parquet, CSV, atau JSON dari penyimpanan:

INSERT INTO dbo.<table name>
SELECT *
FROM OPENROWSET(BULK 'https://<storage account>.blob.core.windows.net/public/<subfolder>/<file name>') AS data
WHERE DATEPART(YEAR, tpep_pickup_datetime) = '2023';

Anda dapat membaca beberapa file dengan menggunakan kartubebas seperti *.parquet, atau dengan menargetkan direktori yang dipartisi seperti /year=*/month=*. Untuk mengoptimalkan performa, terapkan filter dalam klausul WHERE untuk menghilangkan baris dan partisi yang tidak perlu selama eksekusi kueri.

Contoh ini mirip dengan yang digunakan dalam penyerapan dengan COPY INTO. Perintah COPY INTO lebih mudah digunakan, terutama untuk pemuatan data sumber-ke-tujuan yang mudah. Namun, jika Anda perlu mengubah data sumber (seperti mengonversi nilai atau bergabung dengan tabel lain), menggunakan INSERT ... SELECT memberi Anda fleksibilitas untuk melakukan transformasi selama penyerapan.

Menyerap data dari OneLake

Anda dapat menggunakan OPENROWSET fungsi sebagai sumber untuk menyerap data dari penyimpanan Fabric OneLake. Ganti {workspaceId} dan {lakehouseId} dengan GUID ruang kerja dan lakehouse yang sesuai pada contoh berikut:

INSERT INTO dbo.TaxiTrips_2023
SELECT *
FROM OPENROWSET(BULK 'https://onelake.dfs.fabric.microsoft.com/{workspaceId}/{lakehouseId}/Files/year=*/month=*/*.parquet') AS data
WHERE data.filepath(1) = '2023'

Contoh ini mengembangkan dari contoh sebelumnya yang membaca data dari Azure Data Lake Storage. Gunakan pendekatan ini saat Anda perlu mengubah data sumber, misalnya, dengan mengonversi nilai, dengan bergabung dengan tabel lain, atau dengan membaca partisi tertentu. Dalam kasus seperti itu, menggunakan INSERT ... SELECT memberikan fleksibilitas untuk menerapkan transformasi selama penyerapan data.

Menyerap data dari tabel di berbagai gudang dan lakehouse

Untuk CREATE TABLE AS SELECT dan INSERT ... SELECT, pernyataan SELECT juga dapat mereferensikan tabel pada gudang yang berbeda dari gudang tempat tabel tujuan Anda disimpan, dengan menggunakan kueri antar gudang. Ini dapat dicapai dengan menggunakan konvensi [warehouse_or_lakehouse_name.][schema_name.]table_name penamaan tiga bagian. Misalnya, Anda memiliki aset ruang kerja berikut:

  • Sebuah lakehouse bernama taxi_lakehouse dengan data terbaru.
  • Gudang bernama reference_warehouse dengan tabel yang digunakan untuk data referensi.
  • Gudang bernama research_warehouse tempat tabel tujuan dibuat.

Tabel baru dapat dibuat yang menggunakan penamaan tiga bagian untuk menggabungkan data dari tabel pada aset ruang kerja ini:

CREATE TABLE research_warehouse.dbo.taxi_trips
AS
SELECT *
FROM taxi_lakehouse.dbo.TaxiTrips AS latest
INNER JOIN reference_warehouse.dbo.TaxiTrips AS reference
ON latest.vendorId_lpep = reference.vendorId_lpep;

Untuk mempelajari selengkapnya tentang kueri lintas gudang, lihat Menulis Kueri SQL lintas database.

Mengaudit dan memantau penyerapan T-SQL

Operasi CTAS dan INSERT ... SELECT yang dijalankan melalui T-SQL muncul di riwayat/aktivitas kueri gudang, dan dapat dipantau bersama operasi gudang lainnya.

Opsi penyerapan data

Cara lain untuk menyerap data ke gudang Anda meliputi: