Bagikan melalui


Virtualisasi data dengan Azure SQL Managed Instance

Berlaku untuk:Azure SQL Managed Instance

Artikel ini menjelaskan fitur virtualisasi data Azure SQL Managed Instance. Virtualisasi data memungkinkan Anda menjalankan kueri Transact-SQL (T-SQL) pada file yang menyimpan data dalam format data umum di Azure Data Lake Storage Gen2 atau Azure Blob Storage. Anda dapat menggabungkan data ini dengan data relasional yang disimpan secara lokal dengan menggunakan gabungan. Dengan virtualisasi data, Anda dapat secara transparan mengakses data eksternal dalam mode baca-saja, sambil menyimpannya dalam format dan lokasi aslinya.

Gambaran Umum

Virtualisasi data menyediakan dua cara untuk mengkueri file yang ditujukan untuk serangkaian skenario yang berbeda:

  • Sintaks OPENROWSET: Dioptimalkan untuk kueri ad hoc terhadap file. Biasanya digunakan untuk menjelajahi konten dan struktur sekumpulan file baru dengan cepat.
  • Sintaks CREATE EXTERNAL TABLE: Dioptimalkan untuk kueri file berulang menggunakan sintaksis yang identik seolah-olah data disimpan secara lokal dalam database. Tabel eksternal memerlukan beberapa langkah persiapan dibandingkan dengan sintaks OPENROWSET, tetapi memberikan kontrol yang lebih besar atas akses data. Gunakan tabel eksternal untuk beban kerja analitik dan pelaporan.

Dalam kedua kasus, buat sumber data eksternal dengan menggunakan sintaks CREATE EXTERNAL DATA SOURCE T-SQL, seperti yang ditunjukkan dalam artikel ini.

Sintaks CREATE EXTERNAL TABLE AS SELECT juga tersedia untuk Azure SQL Managed Instance. Ini untuk mengekspor hasil pernyataan T-SQL SELECT ke dalam file Parquet atau CSV di Azure Blob Storage atau Azure Data Lake Storage (ADLS) Gen 2 dan membuat tabel eksternal di atas file tersebut.

Format file

Format file parquet dan teks berbatas (CSV) didukung secara langsung. Format file JSON secara tidak langsung didukung dengan menentukan format file CSV di mana kueri mengembalikan setiap dokumen sebagai baris terpisah. Anda dapat mengurai baris lebih lanjut menggunakan JSON_VALUE dan OPENJSON.

Tipe penyimpanan

Simpan file di Azure Data Lake Storage Gen2 atau Azure Blob Storage. Untuk mengkueri file, berikan lokasi dalam format tertentu dan gunakan awalan jenis lokasi yang sesuai dengan jenis sumber eksternal dan titik akhir atau protokol, seperti contoh berikut:

--Blob Storage endpoint
abs://<container>@<storage_account>.blob.core.windows.net/<path>/<file_name>.parquet

--Data Lake endpoint
adls://<container>@<storage_account>.dfs.core.windows.net/<path>/<file_name>.parquet

Penting

Awalan jenis Lokasi yang disediakan digunakan untuk memilih protokol optimal untuk komunikasi dan menggunakan kemampuan tingkat lanjut yang ditawarkan oleh jenis penyimpanan tertentu. Menggunakan awalan generik https:// dinonaktifkan. Selalu gunakan awalan khusus titik akhir.

Memulai

Jika Anda baru menggunakan virtualisasi data dan ingin menguji fungsionalitas dengan cepat, mulailah dengan mengkueri himpunan data publik yang tersedia di Azure Open Datasets, seperti himpunan data Bing COVID-19 yang memungkinkan akses anonim.

Gunakan titik akhir berikut untuk mengkuerikan himpunan data COVID-19 Bing:

  • Parket: abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet
  • CSV: abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv

Untuk memulai cepat, jalankan kueri T-SQL untuk mendapatkan wawasan pertama tentang himpunan data. Kueri ini menggunakan OPENROWSET untuk mengkueri file yang disimpan di akun penyimpanan yang tersedia untuk umum:

--Quick query on a file stored in a publicly available storage account:
SELECT TOP 10 *
FROM OPENROWSET(
 BULK 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet',
 FORMAT = 'parquet'
) AS filerows

Anda dapat melanjutkan eksplorasi himpunan WHEREdata dengan menambahkan , , GROUP BYdan klausul lainnya berdasarkan kumpulan hasil kueri pertama.

Jika kueri pertama gagal pada instans terkelola SQL Anda, instans tersebut kemungkinan telah membatasi akses ke akun penyimpanan Azure. Bicaralah dengan pakar jaringan Anda untuk mengaktifkan akses sebelum Anda melanjutkan kueri.

Saat Anda terbiasa mengkueri himpunan data publik, pertimbangkan untuk beralih ke himpunan data nonpublik yang memerlukan penyediaan kredensial, memberikan hak akses, dan mengonfigurasi aturan firewall. Dalam banyak skenario dunia nyata, Anda beroperasi terutama dengan himpunan data privat.

Akses ke akun penyimpanan nonpublik

Pengguna yang masuk ke instans terkelola SQL harus berwenang untuk mengakses dan mengkueri file yang disimpan di akun penyimpanan nonpublik. Langkah-langkah otorisasi bergantung pada cara instans terkelola SQL mengautentikasi ke akun penyimpanan. Jenis autentikasi dan parameter terkait tidak disediakan langsung dengan setiap kueri. Objek kredensial terlingkup database yang disimpan dalam database pengguna merangkum informasi ini. Database menggunakan kredensial untuk mengakses akun penyimpanan kapan saja kueri dijalankan.

Azure SQL Managed Instance mendukung jenis autentikasi berikut:

  • Identitas yang dikelola
  • Tanda Tangan Akses Bersama (SAS)

Identitas terkelola adalah fitur ID Microsoft Entra (sebelumnya Azure Active Directory) yang menyediakan layanan Azure - seperti Azure SQL Managed Instance - dengan identitas yang dikelola di ID Microsoft Entra. Anda dapat menggunakan identitas ini untuk mengotorisasi permintaan akses data di akun penyimpanan nonpublik. Layanan seperti Azure SQL Managed Instance memiliki identitas terkelola yang ditetapkan sistem, dan juga dapat memiliki satu atau beberapa identitas terkelola yang ditetapkan pengguna. Anda dapat menggunakan identitas terkelola yang ditetapkan sistem atau identitas terkelola yang ditetapkan pengguna untuk virtualisasi data dengan Azure SQL Managed Instance.

Administrator penyimpanan Azure harus terlebih dahulu memberikan izin ke identitas terkelola untuk mengakses data. Berikan izin ke identitas terkelola yang ditetapkan sistem dari instans terkelola SQL dengan cara yang sama seperti Anda memberikan izin kepada pengguna Microsoft Entra lainnya. Contohnya:

  1. Di portal Azure, di halaman Kontrol Akses (IAM) akun penyimpanan, pilih Tambahkan penetapan peran.
  2. Pilih peran Azure RBAC bawaan Pembaca Data Blob Penyimpanan. Peran ini menyediakan akses baca ke identitas terkelola untuk kontainer Azure Blob Storage yang diperlukan.
    • Alih-alih memberikan identitas terkelola peran Storage Blob Data Reader Azure RBAC, Anda juga dapat memberikan izin yang lebih terperinci pada subset file. Semua pengguna yang memerlukan akses ke Membaca file individual dalam data ini juga harus memiliki izin Jalankan pada semua folder induk hingga akar (kontainer). Untuk informasi selengkapnya, lihat Mengatur ACL di Azure Data Lake Storage Gen2.
  3. Pada halaman berikutnya, pilih Tetapkan akses keIdentitas terkelola. Pilih + Pilih anggota, dan di bawah daftar dropdown Identitas terkelola , pilih identitas terkelola yang diinginkan. Untuk informasi selengkapnya, lihat Menetapkan peran Azure menggunakan portal Azure.
  4. Kemudian, buat kredensial cakupan basis data untuk autentikasi identitas yang terkelola. Perhatikan dalam contoh berikut yang 'Managed Identity' merupakan string yang dikodekan secara permanen.
-- Optional: Create MASTER KEY if it doesn't exist in the database:
-- CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Some Very Strong Password Here>'
GO
CREATE DATABASE SCOPED CREDENTIAL MyCredential
WITH IDENTITY = 'Managed Identity'

Sumber data eksternal

Sumber data eksternal adalah abstraksi yang menyediakan referensi mudah ke lokasi file di beberapa kueri. Untuk mengkueri lokasi publik, tentukan lokasi file saat Anda membuat sumber data eksternal:

CREATE EXTERNAL DATA SOURCE MyExternalDataSource
WITH (
    LOCATION = 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest'
)

Untuk mengakses akun penyimpanan nonpublik, tentukan lokasi dan referensikan kredensial cakupan database dengan parameter autentikasi yang dienkapsulasi. Skrip berikut membuat sumber data eksternal yang menunjuk ke jalur file dan mereferensikan kredensial cakupan database:

-- Create external data source that points to the file path, and that references a database scoped credential:
CREATE EXTERNAL DATA SOURCE MyPrivateExternalDataSource
WITH (
    LOCATION = 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest'
        CREDENTIAL = [MyCredential];
)

Sumber data kueri menggunakan OPENROWSET

Sintaks OPENROWSET memungkinkan kueri ad hoc instan sambil hanya membuat jumlah minimal objek database yang diperlukan.

OPENROWSEThanya memerlukan pembuatan sumber data eksternal (dan mungkin kredensial) dibandingkan dengan pendekatan tabel eksternal, yang memerlukan format file eksternal dan tabel eksternal itu sendiri.

Nilai parameter DATA_SOURCE secara otomatis ditambahkan sebelumnya ke parameter BULK untuk membentuk jalur penuh ke file.

Saat menggunakan OPENROWSET, berikan format file seperti contoh berikut, yang meminta satu file:

SELECT TOP 10 *
FROM OPENROWSET(
 BULK 'bing_covid-19_data.parquet',
 DATA_SOURCE = 'MyExternalDataSource',
 FORMAT = 'parquet'
) AS filerows;

Mengkueri beberapa file dan folder

Perintah OPENROWSET juga memungkinkan pengkuerian beberapa file atau folder dengan menggunakan wildcard di jalur BULK.

Contoh berikut menggunakan rekaman perjalanan taksi kuning NYC membuka himpunan data.

Pertama, buat sumber data eksternal:

--Create the data source first:
CREATE EXTERNAL DATA SOURCE NYCTaxiExternalDataSource
WITH (LOCATION = 'abs://nyctlc@azureopendatastorage.blob.core.windows.net');

Sekarang, Anda dapat mengkueri semua file dengan .parquet ekstensi dalam folder. Misalnya, kueri berikut hanya untuk file-file yang cocok dengan pola nama:

--Query all files with .parquet extension in folders matching name pattern:
SELECT TOP 10 *
FROM OPENROWSET(
 BULK 'yellow/puYear=*/puMonth=*/*.parquet',
 DATA_SOURCE = 'NYCTaxiExternalDataSource',
 FORMAT = 'parquet'
) AS filerows;

Saat mengkueri beberapa file atau folder, semua file yang diakses dengan satu OPENROWSET harus memiliki struktur yang sama (seperti jumlah kolom dan jenis data yang sama). Folder tidak dapat dilalui secara rekursif.

Inferensi skema

Inferensi skema otomatis membantu Anda menulis kueri dengan cepat dan menjelajahi data tanpa mengetahui skema file. Inferensi skema hanya berfungsi dengan file parket.

Meskipun nyaman, jenis data yang disimpulkan mungkin lebih besar dari jenis data aktual karena mungkin tidak ada cukup informasi dalam file sumber untuk memastikan jenis data yang sesuai digunakan. Hal ini dapat menyebabkan kinerja kueri memburuk. Misalnya, file parket tidak berisi metadata tentang panjang kolom karakter maksimum sehingga instans menyimpulkannya sebagai varchar(8000).

Gunakan prosedur tersimpan sp_describe_first_results_set untuk memeriksa hasil jenis data kueri Anda, seperti contoh berikut:

EXEC sp_describe_first_result_set N'
 SELECT
 vendorID, tpepPickupDateTime, passengerCount
 FROM
 OPENROWSET(
  BULK ''yellow/*/*/*.parquet'',
  DATA_SOURCE = ''NYCTaxiExternalDataSource'',
  FORMAT=''parquet''
 ) AS nyc';

Setelah Anda mengetahui jenis data, tentukan menggunakan WITH klausul untuk meningkatkan performa:

SELECT TOP 100
 vendorID, tpepPickupDateTime, passengerCount
FROM
OPENROWSET(
 BULK 'yellow/*/*/*.parquet',
 DATA_SOURCE = 'NYCTaxiExternalDataSource',
 FORMAT='PARQUET'
 )
WITH (
vendorID varchar(4), -- we're using length of 4 instead of the inferred 8000
tpepPickupDateTime datetime2,
passengerCount int
) AS nyc;

Karena skema file CSV tidak dapat ditentukan secara otomatis, selalu tentukan kolom menggunakan WITH klausa:

SELECT TOP 10 id, updated, confirmed, confirmed_change
FROM OPENROWSET(
 BULK 'bing_covid-19_data.csv',
 DATA_SOURCE = 'MyExternalDataSource',
 FORMAT = 'CSV',
 FIRSTROW = 2
)
WITH (
 id int,
 updated date,
 confirmed int,
 confirmed_change int
) AS filerows;

Fungsi metadata file

Saat mengkueri beberapa file atau folder, Anda dapat menggunakan fungsi filepath() dan filename() untuk membaca metadata file dan mendapatkan bagian dari jalur atau jalur lengkap dan nama file yang merupakan asal baris dalam kumpulan hasil:

--Query all files and project file path and file name information for each row:
SELECT TOP 10 filerows.filepath(1) as [Year_Folder], filerows.filepath(2) as [Month_Folder],
filerows.filename() as [File_name], filerows.filepath() as [Full_Path], *
FROM OPENROWSET(
 BULK 'yellow/puYear=*/puMonth=*/*.parquet',
 DATA_SOURCE = 'NYCTaxiExternalDataSource',
 FORMAT = 'parquet') AS filerows;
--List all paths:
SELECT DISTINCT filerows.filepath(1) as [Year_Folder], filerows.filepath(2) as [Month_Folder]
FROM OPENROWSET(
 BULK 'yellow/puYear=*/puMonth=*/*.parquet',
 DATA_SOURCE = 'NYCTaxiExternalDataSource',
 FORMAT = 'parquet') AS filerows;

Ketika dipanggil tanpa parameter, fungsi filepath() menampilkan jalur file yang merupakan asal dari baris tersebut. Ketika DATA_SOURCE digunakan dalam OPENROWSET, ia menampilkan jalur relatif terhadap DATA_SOURCE, atau mengembalikan jalur file lengkap.

Ketika dipicu dengan parameter, fungsi ini menampilkan bagian dari jalur yang cocok dengan wildcard pada posisi yang ditentukan dalam parameter. Misalnya, nilai parameter 1 mengembalikan bagian dari jalur yang cocok dengan wildcard pertama.

Fungsi filepath() juga dapat digunakan untuk memfilter dan menggabungkan baris:

SELECT
 r.filepath() AS filepath
 ,r.filepath(1) AS [year]
 ,r.filepath(2) AS [month]
 ,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
 BULK 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = 'NYCTaxiExternalDataSource',
FORMAT = 'parquet'
 ) AS r
WHERE
 r.filepath(1) IN ('2017')
 AND r.filepath(2) IN ('10', '11', '12')
GROUP BY
 r.filepath()
 ,r.filepath(1)
 ,r.filepath(2)
ORDER BY
 filepath;

Membuat tampilan di atas OPENROWSET

Anda dapat membuat dan menggunakan tampilan untuk membungkus kueri OPENROWSET, sehingga Anda dapat dengan mudah menggunakan kembali kueri yang mendasarinya:

CREATE VIEW TaxiRides AS
SELECT *
FROM OPENROWSET(
 BULK 'yellow/puYear=*/puMonth=*/*.parquet',
 DATA_SOURCE = 'NYCTaxiExternalDataSource',
 FORMAT = 'parquet'
) AS filerows

Bisa juga menambahkan kolom yang berisi data lokasi file ke tampilan menggunakan fungsi filepath() untuk pemfilteran yang lebih mudah dan lebih efisien. Menggunakan tampilan dapat mengurangi jumlah file, dan jumlah data, kueri di atas tampilan perlu dibaca dan diproses saat difilter oleh salah satu kolom tersebut:

CREATE VIEW TaxiRides AS
SELECT *
 , filerows.filepath(1) AS [year]
 , filerows.filepath(2) AS [month]
FROM OPENROWSET(
 BULK 'yellow/puYear=*/puMonth=*/*.parquet',
 DATA_SOURCE = 'NYCTaxiExternalDataSource',
 FORMAT = 'parquet'
) AS filerows

Tampilan juga memungkinkan pelaporan dan alat analitik seperti Power BI untuk memakai hasil OPENROWSET.

Tabel eksternal

Tabel eksternal merangkum akses ke file, sehingga mengkuerinya terasa hampir sama dengan mengkueri data relasional lokal yang disimpan dalam tabel pengguna. Untuk membuat tabel eksternal, Anda harus memiliki sumber data eksternal dan objek format file eksternal di tempat:

--Create external file format
CREATE EXTERNAL FILE FORMAT DemoFileFormat
WITH (
 FORMAT_TYPE=PARQUET
)
GO

--Create external table:
CREATE EXTERNAL TABLE tbl_TaxiRides(
 vendorID VARCHAR(100) COLLATE Latin1_General_BIN2,
 tpepPickupDateTime DATETIME2,
 tpepDropoffDateTime DATETIME2,
 passengerCount INT,
 tripDistance FLOAT,
 puLocationId VARCHAR(8000),
 doLocationId VARCHAR(8000),
 startLon FLOAT,
 startLat FLOAT,
 endLon FLOAT,
 endLat FLOAT,
 rateCodeId SMALLINT,
 storeAndFwdFlag VARCHAR(8000),
 paymentType VARCHAR(8000),
 fareAmount FLOAT,
 extra FLOAT,
 mtaTax FLOAT,
 improvementSurcharge VARCHAR(8000),
 tipAmount FLOAT,
 tollsAmount FLOAT,
 totalAmount FLOAT
)
WITH (
 LOCATION = 'yellow/puYear=*/puMonth=*/*.parquet',
 DATA_SOURCE = NYCTaxiExternalDataSource,
 FILE_FORMAT = DemoFileFormat
);
GO

Setelah membuat tabel eksternal, Anda bisa mengkuerinya sama seperti tabel lainnya:

SELECT TOP 10 *
FROM tbl_TaxiRides;

Seperti OPENROWSET, tabel eksternal mendukung mengkueri banyak file dan folder dengan karakter pengganti. Namun, tabel eksternal tidak mendukung inferensi skema.

Pertimbangan performa

Tidak ada batasan keras untuk jumlah file atau jumlah data yang bisa Anda kueri, tetapi performa kueri tergantung pada jumlah data, format data, cara data diatur, dan kompleksitas kueri dan gabungan.

Data yang dipartisi kueri

Data sering diatur dalam subfolder, juga disebut partisi. Anda dapat menginstruksikan instans terkelola SQL untuk mengkueri hanya folder dan file tertentu. Melakukannya mengurangi jumlah file dan jumlah data yang perlu dibaca dan diproses kueri, sehingga menghasilkan performa yang lebih baik. Jenis pengoptimalan kueri ini dikenal sebagai pemangkasan partisi atau eliminasi partisi. Anda dapat menghilangkan partisi dari eksekusi kueri dengan menggunakan fungsi filepath() metadata dalam WHERE klausa kueri.

Contoh kueri berikut membaca file data Taksi Kuning NYC hanya selama tiga bulan terakhir 2017:

SELECT
    r.filepath() AS filepath
    ,r.filepath(1) AS [year]
    ,r.filepath(2) AS [month]
    ,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
        BULK 'yellow/puYear=*/puMonth=*/*.parquet',
        DATA_SOURCE = 'NYCTaxiExternalDataSource',
        FORMAT = 'parquet'
    )
WITH (
    vendorID INT
) AS [r]
WHERE
    r.filepath(1) IN ('2017')
    AND r.filepath(2) IN ('10', '11', '12')
GROUP BY
    r.filepath()
    ,r.filepath(1)
    ,r.filepath(2)
ORDER BY
    filepath;

Jika data tersimpan Anda tidak dipartisi, pertimbangkan untuk mempartisinya untuk meningkatkan performa kueri.

Jika Anda menggunakan tabel eksternal, filepath() dan filename() fungsi didukung tetapi tidak dalam WHERE klausa. Anda masih bisa memfilter menurut filename atau filepath jika Anda menggunakannya dalam kolom komputasi, seperti contoh berikut menunjukkan:

CREATE EXTERNAL TABLE tbl_TaxiRides (
 vendorID VARCHAR(100) COLLATE Latin1_General_BIN2,
 tpepPickupDateTime DATETIME2,
 tpepDropoffDateTime DATETIME2,
 passengerCount INT,
 tripDistance FLOAT,
 puLocationId VARCHAR(8000),
 doLocationId VARCHAR(8000),
 startLon FLOAT,
 startLat FLOAT,
 endLon FLOAT,
 endLat FLOAT,
 rateCodeId SMALLINT,
 storeAndFwdFlag VARCHAR(8000),
 paymentType VARCHAR(8000),
 fareAmount FLOAT,
 extra FLOAT,
 mtaTax FLOAT,
 improvementSurcharge VARCHAR(8000),
 tipAmount FLOAT,
 tollsAmount FLOAT,
 totalAmount FLOAT,
 [Year]  AS CAST(filepath(1) AS INT), --use filepath() for partitioning
 [Month]  AS CAST(filepath(2) AS INT) --use filepath() for partitioning
)
WITH (
 LOCATION = 'yellow/puYear=*/puMonth=*/*.parquet',
 DATA_SOURCE = NYCTaxiExternalDataSource,
 FILE_FORMAT = DemoFileFormat
);
GO

SELECT *
      FROM tbl_TaxiRides
WHERE
      [year]=2017
      AND [month] in (10,11,12);

Jika data tersimpan Anda tidak dipartisi, pertimbangkan untuk mempartisinya untuk meningkatkan performa kueri.

Statistik

Mengumpulkan statistik pada data Anda merupakan salah satu hal paling penting yang dapat Anda lakukan untuk optimasi kueri. Semakin banyak yang diketahui instans tentang data Anda, semakin cepat ia dapat menjalankan kueri. Pengoptimal kueri mesin SQL adalah pengoptimal berbasis biaya. Pengoptimal membandingkan biaya paket kueri yang bermacam, dan kemudian memilih paket dengan biaya terendah. Dalam kebanyakan kasus, ia memilih rencana yang menjalankan yang tercepat.

Pembuatan statistik otomatis

Azure SQL Managed Instance menganalisis kueri pengguna masuk untuk statistik yang hilang. Jika statistik hilang, pengoptimal kueri secara otomatis membuat statistik pada kolom individual dalam predikat kueri atau kondisi gabungan untuk meningkatkan perkiraan kardinalitas untuk rencana kueri. Pembuatan statistik otomatis dilakukan secara sinkron sehingga Anda mungkin mengalami sedikit penurunan performa kueri jika kolom Anda kehilangan statistik. Waktu untuk membuat statistik untuk satu kolom tergantung pada ukuran file yang ditargetkan.

Statistik manual OPENROWSET

Statistik kolom tunggal untuk OPENROWSET jalur dapat dibuat menggunakan prosedur tersimpan sys.sp_create_openrowset_statistics, dengan meneruskan kueri pemilihan dengan satu kolom sebagai parameter.

EXEC sys.sp_create_openrowset_statistics N'
SELECT pickup_datetime
FROM OPENROWSET(
 BULK ''abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest/*.parquet'',
 FORMAT = ''parquet'') AS filerows
';

Secara default, instans tersebut menggunakan 100% data yang disediakan dalam himpunan data untuk membuat statistik. Anda dapat secara opsional menentukan ukuran sampel sebagai persentase menggunakan opsi TABLESAMPLE. Untuk membuat statistik kolom tunggal untuk beberapa kolom, jalankan sys.sp_create_openrowset_statistics untuk setiap kolom. Anda tidak dapat membuat statistik multi-kolom untuk jalur OPENROWSET.

Untuk memperbarui statistik yang ada, letakkan terlebih dahulu menggunakan prosedur sys.sp_drop_openrowset_statistics yang disimpan, lalu buat ulang menggunakan sys.sp_create_openrowset_statistics:

EXEC sys.sp_drop_openrowset_statistics N'
SELECT pickup_datetime
FROM OPENROWSET(
 BULK ''abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest/*.parquet'',
 FORMAT = ''parquet'') AS filerows
';

Statistik manual tabel eksternal

Sintaks untuk membuat statistik pada tabel eksternal menyerupai yang digunakan untuk tabel pengguna biasa. Untuk membuat statistik pada kolom, berikan nama untuk objek statistik dan nama kolom:

CREATE STATISTICS sVendor
ON tbl_TaxiRides (vendorID)
WITH FULLSCAN, NORECOMPUTE;

Opsi WITH bersifat wajib, dan untuk ukuran sampel, opsi yang diizinkan adalah FULLSCAN dan SAMPLE n persen.

  • Untuk membuat statistik kolom tunggal untuk beberapa kolom, jalankan CREATE STATISTICS untuk setiap kolom.
  • Statistik multikolom tidak didukung.

Pecahkan masalah

Masalah dengan eksekusi kueri biasanya terjadi ketika instans terkelola SQL tidak dapat mengakses lokasi file. Pesan kesalahan terkait mungkin melaporkan hak akses yang tidak mencukupi, lokasi yang tidak ada, file yang digunakan oleh proses lain, atau direktori tersebut tidak dapat dicantumkan. Dalam kebanyakan kasus, kesalahan ini menunjukkan bahwa kebijakan kontrol lalu lintas jaringan memblokir akses ke file atau pengguna tidak memiliki hak akses. Periksa item berikut:

  • Jalur lokasi yang salah atau salah ketik.
  • Validitas kunci SAS. Ini bisa kedaluwarsa, berisi kesalahan ketik, atau dimulai dengan tanda tanya.
  • Izin kunci SAS diizinkan. Baca minimal, dan Daftar jika wildcards digunakan.
  • Lalu lintas masuk yang diblokir pada akun penyimpanan. Periksa Mengelola aturan jaringan virtual untuk Azure Storage untuk detailnya dan pastikan bahwa akses dari VNet instans SQL yang dikelola diizinkan.
  • Lalu lintas keluar diblokir pada instans terkelola SQL dengan menggunakan kebijakan titik akhir penyimpanan. Izinkan lalu lintas keluar ke akun penyimpanan.
  • Hak akses identitas terkelola. Pastikan identitas terkelola instans memiliki hak akses ke akun penyimpanan.
  • Tingkat kompatibilitas database harus 130 atau lebih tinggi agar kueri virtualisasi data berfungsi.

BUAT TABEL EKSTERNAL SEBAGAI PILIH` (CETAS)

CREATE EXTERNAL TABLE AS SELECT (CETAS) memungkinkan Anda mengekspor data dari instans terkelola SQL Anda ke akun penyimpanan eksternal. Anda dapat menggunakan CETAS untuk membuat tabel eksternal di atas file Parquet atau CSV di penyimpanan Azure Blob atau Azure Data Lake Storage (ADLS) Gen2. CETAS juga dapat mengekspor, secara paralel, hasil pernyataan T-SQL SELECT ke dalam tabel eksternal yang dibuat. Ada potensi risiko penyelundupan data dengan kemampuan ini, sehingga Azure SQL Managed Instance menonaktifkan CETAS secara default. Untuk mengaktifkan, lihat CREATE EXTERNAL TABLE AS SELECT (CETAS).

Batasan

Masalah umum