Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Kumpulan SQL tanpa server memungkinkan Anda menganalisis data dalam kontainer Azure Cosmos DB yang diaktifkan dengan Azure Synapse Link dalam waktu hampir real time tanpa memengaruhi performa beban kerja transaksional Anda. Ini menawarkan sintaks Transact-SQL (T-SQL) yang familier untuk mengkueri data dari penyimpanan analitik dan konektivitas terintegrasi ke berbagai alat kecerdasan bisnis (BI) dan kueri ad-hoc melalui antarmuka T-SQL.
Untuk mengkueri Azure Cosmos DB, fitur penuh SELECT didukung melalui fungsi OPENROWSET, yang mencakup sebagian besar fungsi dan operator SQL. Anda juga dapat menyimpan hasil kueri yang membaca data dari Azure Cosmos DB bersama dengan data di Azure Blob Storage atau Azure Data Lake Storage dengan menggunakan buat tabel eksternal sebagai yang dipilih (CETAS/Create External Table As Select). Saat ini Anda tidak dapat menyimpan hasil kueri kumpulan SQL tanpa server ke Azure Cosmos DB dengan menggunakan CETAS.
Artikel ini menjelaskan cara menulis kueri dengan kumpulan SQL tanpa server yang meminta data dari kontainer Azure Cosmos DB yang diaktifkan dengan Azure Synapse Link. Anda kemudian dapat mempelajari selengkapnya tentang membangun tampilan kumpulan SQL tanpa server di atas kontainer Azure Cosmos DB dan menghubungkannya ke model Power BI dalam tutorial ini. Tutorial ini menggunakan kontainer dengan skema Azure Cosmos DB yang terdefinisi dengan baik. Anda juga dapat memeriksa modul Pelajari tentang cara Mengkueri Azure Cosmos DB dengan SQL Serverless untuk Azure Synapse Analytics.
Prasyarat
- Pastikan Anda menyiapkan penyimpanan data analitik.
- Aktifkan penyimpanan analitis pada kontainer Azure Cosmos DB Anda.
- Dapatkan string koneksi dengan kunci baca-saja yang bisa Anda gunakan untuk mengkueri penyimpanan analitik.
- Dapatkan kunci baca-saja yang akan digunakan untuk mengakses kontainer Azure Cosmos DB.
- Pastikan Anda telah menerapkan semua praktik terbaik, seperti:
- Pastikan penyimpanan analitik Azure Cosmos DB Anda berada di wilayah yang sama dengan kumpulan SQL tanpa server.
- Pastikan aplikasi klien (Power BI, layanan Analisis) berada di wilayah yang sama dengan kumpulan SQL tanpa server.
- Jika Anda mengembalikan sejumlah besar data (lebih dari 80 GB), pertimbangkan untuk menggunakan lapisan cache seperti Layanan Analisis dan memuat partisi yang lebih kecil dari 80 GB ke dalam model Layanan Analisis.
- Jika Anda memfilter data menggunakan kolom string, pastikan Anda menggunakan
OPENROWSET
fungsi dengan klausa eksplisitWITH
yang memiliki jenis sekecil mungkin. Misalnya, jangan gunakanVARCHAR(1000)
jika Anda tahu bahwa properti memiliki hingga lima karakter.
Gambaran Umum
Kumpulan SQL tanpa server memungkinkan Anda untuk meminta penyimpanan analitik Azure Cosmos DB menggunakan OPENROWSET
fungsi.
OPENROWSET(
'CosmosDB',
'<SQL connection string for Azure Cosmos DB>',
<other parameters>
) [ < with clause > ] AS alias
String koneksi SQL untuk Azure Cosmos DB mencakup komponen berikut:
- akun - Nama akun Azure Cosmos DB yang Anda targetkan.
- database - Nama kontainer, ditentukan tanpa tanda kutip dalam sintaks OPENROWSET. Jika nama kontainer berisi karakter khusus (misalnya, tanda hubung -), nama tersebut harus diapit dalam tanda kurung siku ([]).
- region (opsional) - Wilayah penyimpanan analitik Cosmos DB Anda. Jika dihilangkan, wilayah utama dari kontainer akan digunakan.
-
endpoint (opsional) - URI endpoint Cosmos DB (misalnya
https://<account name>.documents.azure.us
) yang diperlukan jika akun Cosmos DB Anda tidak mengikuti format standar*.documents.azure.com
.
Penting
Parameter ini endpoint
diperlukan untuk akun yang tidak cocok dengan format standar *.documents.azure.com
. Misalnya, jika akun Azure Cosmos DB Anda diakhiri dengan .documents.azure.us
, pastikan Anda menambahkan endpoint=https://<account name>.documents.azure.us
di string koneksi. Pastikan Anda menyertakan https://
awalan.
Properti ini dapat diidentifikasi dari string koneksi Cosmos DB standar, misalnya:
AccountEndpoint=https://<database account name>.documents.azure.com:443/;AccountKey=<database account master key>;
String koneksi SQL dapat diformat sebagai berikut:
account=<database account name>;database=<database name>;region=<region name>
String koneksi ini tidak menyertakan informasi autentikasi yang diperlukan untuk terhubung ke penyimpanan analitik Cosmos DB. Informasi tambahan diperlukan tergantung pada jenis autentikasi yang digunakan:
- Jika
OPENROWSET
menggunakan identitas terkelola ruang kerja untuk mengakses penyimpanan analitik, Anda harus menambahkanAuthType
properti. - Jika
OPENROWSET
menggunakan kunci akun sebaris, Anda harus menambahkankey
properti. Ini memungkinkan Anda untuk mengkueri koleksi Azure Cosmos DB tanpa perlu menyiapkan kredensial. - Alih-alih menyertakan informasi autentikasi dalam string koneksi,
OPENROWSET
dapat mereferensikan kredensial yang berisi kunci akun Azure Cosmos DB. Pendekatan ini dapat digunakan untuk membuat tampilan pada koleksi Azure Cosmos DB.
Opsi ini dijelaskan di bawah ini.
Kumpulan SQL tanpa server memungkinkan Anda mengkueri penyimpanan Cosmos DB Analytical dan mengautentikasi dengan kunci akun Cosmos DB asli atau mengizinkan identitas terkelola Synapse mengakses penyimpanan Cosmos DB Analytic. Anda dapat menggunakan sintaks berikut dalam skenario ini:
OPENROWSET(
'CosmosDB',
'<SQL connection string for Azure Cosmos DB>',
<Container name>
) [ < with clause > ] AS alias
Selain properti umum dalam string koneksi SQL yang dijelaskan di atas (akun, database, wilayah, dan titik akhir), Anda perlu menambahkan salah satu opsi berikut:
-
AuthType - atur opsi ini ke
ManagedIdentity
jika mengakses Cosmos DB menggunakan Identitas Terkelola ruang kerja Synapse. - key - Kunci master untuk mengakses data Cosmos DB, digunakan jika tidak menggunakan identitas terkelola ruang kerja Synapse.
Contoh string koneksi ditampilkan dalam tabel berikut:
Jenis autentikasi | Rangkaian koneksi |
---|---|
Identitas terkelola ruang kerja Synapse | account=<account name>;database=<db name>;region=<region name>;AuthType=ManagedIdentity |
Kunci master akun Cosmos DB | account=<account name>;database=<db name>;region=<region name>;key=<account master key> |
Penting
Pastikan Anda menggunakan beberapa kolase database UTF-8, misalnya, Latin1_General_100_CI_AS_SC_UTF8
, karena nilai untai di penyimpanan analitik Azure Cosmos DB dikodekan sebagai teks UTF-8.
Ketidakcocokan antara pengodean teks dalam file dan kolase dapat menyebabkan kesalahan konversi yang tidak terduga.
Anda dapat dengan mudah mengubah kolase default pada database saat ini dengan menggunakan pernyataan T-SQL alter database current collate Latin1_General_100_CI_AI_SC_UTF8
.
Catatan
Pool SQL tanpa server tidak mendukung mengkueri penyimpanan transaksional Azure Cosmos DB.
Sampel kumpulan data
Contoh dalam artikel ini didasarkan pada data dari Pusat Pencegahan dan Pengendalian Penyakit Eropa (ECDC) Kasus COVID-19 dan Kumpulan Data Penelitian Terbuka COVID-19 (CORD-19).
Anda dapat melihat lisensi dan struktur data pada halaman ini. Anda juga dapat mengunduh data sampel untuk himpunan data ECDC dan CORD-19.
Untuk mengikuti berdasarkan artikel ini yang menampilkan bagaimana cara membuat kueri data Azure Cosmos DB dengan kumpulan SQL tanpa server, pastikan Anda membuat sumber daya berikut:
- Akun database Azure Cosmos DB yang mengaktifkan Azure Synapse Link
- Database Azure Cosmos DB bernama
covid
- Dua kontainer Azure Cosmos DB bernama
Ecdc
danCord19
dimuat dengan himpunan data sampel sebelumnya
Perhatikan bahwa koneksi ini tidak menjamin performa karena akun ini mungkin terletak di wilayah terpencil dibandingkan dengan titik akhir Synapse SQL Anda.
Jelajahi data Azure Cosmos DB dengan inferensi skema otomatis
Cara termudah untuk menjelajahi data di Azure Cosmos DB adalah dengan menggunakan kemampuan inferensi skema otomatis. Dengan menghilangkan WITH
klausul dari OPENROWSET
pernyataan, Anda dapat menginstruksikan kumpulan SQL tanpa server untuk mendeteksi otomatis (menyimpulkan) skema penyimpanan analitik pada kontainer Azure Cosmos DB.
Penting
Dalam skrip, ganti nilai-nilai ini dengan nilai Anda sendiri:
- your-cosmosdb - nama akun Cosmos DB Anda
- yourcosmosdbkey - kunci akun Cosmos DB Anda
SELECT TOP 10 *
FROM OPENROWSET(
'CosmosDB',
'Account=your-cosmosdb;Database=covid;Key=yourcosmosdbkey',
Ecdc) as documents
Dalam contoh sebelumnya, kami menginstruksikan kumpulan SQL tanpa server untuk menghubungkan ke covid
database di dalam akun Azure Cosmos DB MyCosmosDbAccount
yang terautentikasi dengan menggunakan kunci Azure Cosmos DB (dummy pada contoh sebelumnya). Kemudian, kami mengakses toko analitik dari Ecdc
kontainer di wilayah West US 2
. Karena tidak ada proyeksi properti tertentu, OPENROWSET
fungsi mengembalikan semua properti dari item Azure Cosmos DB.
Asumsikan bahwa item pada kontainer Azure Cosmos DB memiliki date_rep
, cases
, dan geo_id
properti, hasil kueri ini diperlihatkan dalam tabel berikut:
tanggal_rep | Kasus | geo_id |
---|---|---|
2020-08-13 | 254 | RS |
2020-08-12 | 235 | RS |
2020-08-11 | 163 | RS |
Jika Anda perlu untuk menjelajahi data dari kontainer lain pada database Azure Cosmos DB yang sama, Anda dapat menggunakan string koneksi yang sama dan mereferensikan kontainer yang diperlukan sebagai parameter ketiga:
SELECT TOP 10 *
FROM OPENROWSET(
'CosmosDB',
'Account=your-cosmosdb;Database=covid;Key=yourcosmosdbkey',
Cord19) as cord19
Secara eksplisit menentukan skema
Meskipun kemampuan inferensi skema otomatis dalam OPENROWSET
memberikan pengalaman yang sederhana dan mudah digunakan, skenario bisnis Anda mungkin mengharuskan Anda untuk menentukan skema secara eksplisit untuk hanya membaca properti yang relevan dari data Azure Cosmos DB.
Fungsi ini OPENROWSET
memungkinkan Anda secara eksplisit menentukan properti mana yang ingin Anda baca dari data dalam kontainer dan untuk menentukan jenis datanya.
Mari bayangkan kita telah mengimpor beberapa data dari kumpulan data ECDC COVID dengan struktur berikut ke dalam Azure Cosmos DB:
{"date_rep":"2020-08-13","cases":254,"countries_and_territories":"Serbia","geo_id":"RS"}
{"date_rep":"2020-08-12","cases":235,"countries_and_territories":"Serbia","geo_id":"RS"}
{"date_rep":"2020-08-11","cases":163,"countries_and_territories":"Serbia","geo_id":"RS"}
Dokumen datar JSON pada Azure Cosmos DB ini dapat direpresentasikan sebagai sekumpulan baris dan kolom pada Synapse SQL. Fungsi ini OPENROWSET
memungkinkan Anda menentukan subset properti yang ingin Anda baca dan jenis kolom yang tepat dalam WITH
klausa:
SELECT TOP 10 *
FROM OPENROWSET(
'CosmosDB',
'Account=your-cosmosdb;Database=covid;Key=yourcosmosdbkey',
Ecdc
) with ( date_rep varchar(20), cases bigint, geo_id varchar(6) ) as rows
Hasil kueri ini mungkin terlihat seperti pada tabel berikut ini:
tanggal_rep | Kasus | geo_id |
---|---|---|
2020-08-13 | 254 | RS |
2020-08-12 | 235 | RS |
2020-08-11 | 163 | RS |
Untuk informasi selengkapnya tentang jenis SQL yang harus digunakan untuk nilai Azure Cosmos DB, lihat Pemetaan jenis Azure Cosmos DB ke SQL di akhir artikel ini.
Buat tampilan
Membuat tampilan di database master
atau di database default tidak direkomendasikan atau didukung. Jadi Anda perlu membuat basis data pengguna untuk pandangan Anda.
Setelah Anda mengidentifikasi skema, Anda dapat menyiapkan tampilan di atas data Azure Cosmos DB Anda. Anda sebaiknya menempatkan kunci akun Azure Cosmos DB Anda pada kredensial yang terpisah dan mereferensi kredensial ini dari fungsi OPENROWSET
. Jangan simpan kunci akun Anda dalam definisi tampilan.
CREATE CREDENTIAL MyCosmosDbAccountCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = 'yourcosmosdbkey';
GO
CREATE OR ALTER VIEW Ecdc
AS SELECT *
FROM OPENROWSET(
PROVIDER = 'CosmosDB',
CONNECTION = 'Account=your-cosmosdb;Database=covid',
OBJECT = 'Ecdc',
SERVER_CREDENTIAL = 'MyCosmosDbAccountCredential'
) with ( date_rep varchar(20), cases bigint, geo_id varchar(6) ) as rows
Jangan gunakan OPENROWSET
tanpa skema yang ditentukan secara eksplisit karena dapat memengaruhi performa Anda. Pastikan Anda menggunakan ukuran sekecil mungkin untuk kolom Anda (misalnya VARCHAR(100)
, bukan default VARCHAR(8000)
). Anda harus menggunakan beberapa kolase UTF-8 sebagai kolase database default atau mengaturnya sebagai kolase kolom eksplisit untuk menghindari masalah konversi UTF-8. Pengurutan Latin1_General_100_BIN2_UTF8
memberikan kinerja terbaik saat Anda memfilter data menggunakan beberapa kolom string.
Saat Anda mengkueri tampilan, Anda mungkin mengalami kesalahan atau hasil yang tidak terduga. Referensi tampilan kolom atau objek mungkin dimodifikasi atau tidak ada lagi. Anda perlu menyesuaikan definisi tampilan secara manual agar selaras dengan perubahan skema yang mendasar. Perlu diingat bahwa ini dapat terjadi baik saat menggunakan inferensi skema otomatis dalam tampilan dan ketika secara eksplisit menentukan skema.
Kueri objek bertumpuk
Dengan Azure Cosmos DB, Anda dapat merepresentasikan model data yang lebih kompleks dengan menyusunnya sebagai objek atau array yang bertumpuk. Kemampuan autosync pada Azure Synapse Link untuk Azure Cosmos DB mengelola representasi skema pada penyimpanan analitik di luar kotak, yang mencakup penanganan tipe data bertumpuk yang memungkinkan kueri kaya dari kumpulan SQL tanpa server.
Misalnya, kumpulan data CORD-19 memiliki dokumen JSON yang mengikuti struktur ini:
{
"paper_id": <str>, # 40-character sha1 of the PDF
"metadata": {
"title": <str>,
"authors": <array of objects> # list of author dicts, in order
...
}
...
}
Objek dan array yang bertumpuk pada Azure Cosmos DB direpresentasikan sebagai untai JSON pada hasil kueri saat OPENROWSET
fungsi membacanya. Anda dapat menentukan jalur ke nilai tertumpuk di dalam objek saat Anda menggunakan WITH
klausul:
SELECT TOP 10 *
FROM OPENROWSET(
'CosmosDB',
'Account=your-cosmosdb;Database=covid;Key=yourcosmosdbkey',
Cord19)
WITH ( paper_id varchar(8000),
title varchar(1000) '$.metadata.title',
metadata varchar(max),
authors varchar(max) '$.metadata.authors'
) AS docs;
Hasil kueri ini mungkin terlihat seperti pada tabel berikut ini:
ID kertas | judul | metadata | penulis |
---|---|---|---|
bb11206963e831f... | Informasi Tambahan eko-epidemiologi | {"title":"Supplementary Informati… |
[{"first":"Julien","last":"Mélade","suffix":"","af… |
bb1206963e831f1... | Penggunaan Sera Konvalesen dalam Sistem Imun… | {"title":"The Use of Convalescent… |
[{"first":"Antonio","last":"Lavazza","suffix":"", … |
BB378ECA9AAC649... | Tylosema esculentum (Marama) Umbi dan B… | {"title":"Tylosema esculentum (Ma… |
[{"first":"Walter","last":"Chingwaru","suffix":"",… |
Untuk mempelajari selengkapnya, lihat Menganalisis jenis data kompleks di Azure Synapse Analytics atau Kueri jenis berlapis dalam file Parquet dan JSON dengan menggunakan kumpulan SQL tanpa server.
Penting
Jika Anda melihat karakter yang tidak terduga pada teks Anda seperti Mélade
dan bukan Mélade
, maka kolase database Anda tidak diatur ke kolase UTF-8. Anda dapat mengubah kolase database menjadi kolase UTF-8 dengan menggunakan pernyataan SQL seperti ALTER DATABASE MyLdw COLLATE LATIN1_GENERAL_100_CI_AS_SC_UTF8
.
Ratakan array yang bertumpuk
Data Azure Cosmos DB mungkin mengandung subarray bersarang seperti array penulis dari set data CORD-19 :
{
"paper_id": <str>, # 40-character sha1 of the PDF
"metadata": {
"title": <str>,
"authors": [ # list of author dicts, in order
{
"first": <str>,
"middle": <list of str>,
"last": <str>,
"suffix": <str>,
"affiliation": <dict>,
"email": <str>
},
...
],
...
}
Dalam beberapa kasus, Anda mungkin perlu menggabungkan properti dari item atas (metadata) dengan semua elemen array (penulis). Kumpulan SQL tanpa server memungkinkan Anda meratakan struktur berlapis dengan menerapkan fungsi OPENJSON
pada array berlapis.
SELECT
*
FROM
OPENROWSET(
'CosmosDB',
'Account=your-cosmosdb;Database=covid;Key=yourcosmosdbkey',
Cord19
) WITH ( title varchar(1000) '$.metadata.title',
authors varchar(max) '$.metadata.authors' ) AS docs
CROSS APPLY OPENJSON ( authors )
WITH (
first varchar(50),
last varchar(50),
affiliation nvarchar(max) as json
) AS a
Hasil kueri ini mungkin terlihat seperti pada tabel berikut ini:
judul | penulis | pertama | terakhir | afiliasi |
---|---|---|---|---|
Informasi Tambahan eko-epidemiologi | [{"first":"Julien","last":"Mélade","suffix":"","affiliation":{"laboratory":"Centre de Recher… |
Julien | Mélade | {"laboratory":"Centre de Recher… |
Informasi Tambahan eko-epidemiologi | [{"first":"Nicolas","last":"4#","suffix":"","affiliation":{"laboratory":"","institution":"U… |
Nicolas | #4 | {"laboratory":"","institution":"U… |
Informasi Tambahan eko-epidemiologi | [{"first":"Beza","last":"Ramazindrazana","suffix":"","affiliation":{"laboratory":"Centre de Recher… |
Beza | Ramazindrazana | {"laboratory":"Centre de Recher… |
Informasi Tambahan eko-epidemiologi | [{"first":"Olivier","last":"Flores","suffix":"","affiliation":{"laboratory":"UMR C53 CIRAD, … |
Olivier | Flores | {"laboratory":"UMR C53 CIRAD, … |
Penting
Jika Anda melihat karakter yang tidak terduga pada teks Anda seperti Mélade
dan bukan Mélade
, maka kolase database Anda tidak diatur ke kolase UTF-8. Anda dapat mengubah kolase database menjadi kolase UTF-8 dengan menggunakan pernyataan SQL seperti ALTER DATABASE MyLdw COLLATE LATIN1_GENERAL_100_CI_AS_SC_UTF8
.
Pemetaan tipe Azure Cosmos DB ke SQL
Meskipun penyimpanan transaksional Azure Cosmos DB merupakan skema-agnostik, penyimpanan analitik diskemakan untuk mengoptimalkan kinerja kueri analitik. Dengan kemampuan autosync pada Azure Synapse Link, Azure Cosmos DB mengelola representasi skema pada penyimpanan analitik secara otomatis, yang mencakup penanganan tipe data bersarang. Karena kumpulan SQL tanpa server meminta penyimpanan analitik, penting untuk memahami cara memetakan tipe data input Azure Cosmos DB ke tipe data SQL.
Akun Azure Cosmos DB API SQL (Core) mendukung jenis properti JSON dari angka, string, Boolean, null, objek bertingkat, atau array. Anda perlu memilih tipe SQL yang cocok dengan tipe JSON ini jika Anda menggunakan WITH
klausul di OPENROWSET
. Tabel berikut ini memperlihatkan tipe kolom SQL yang sebaiknya digunakan untuk tipe properti yang berbeda di Azure Cosmos DB.
Tipe properti Azure Cosmos DB | Tipe kolom SQL |
---|---|
Boolean (tipe data yang hanya memiliki dua nilai: true atau false) | sedikit |
Integer | bigint |
Desimal | mengapung |
string | varchar (pengurutan database UTF-8) |
Waktu tanggal (untai berformat ISO) | varchar(30) |
Waktu tanggal (tanda waktu UNIX) | bigint |
Nol | any SQL type |
Objek atau array yang bertumpuk | varchar(max) (pengurutan database UTF-8), diserialisasikan sebagai teks JSON |
Skema keakuratan penuh
Skema keakuratan penuh Azure Cosmos DB merekam nilai dan tipe kecocokan terbaiknya untuk setiap properti dalam kontainer.
OPENROWSET
Fungsi pada kontainer dengan skema keakuratan penuh menyediakan tipe dan nilai aktual di setiap sel. Mari kita asumsikan bahwa kueri berikut membaca item dari kontainer dengan skema keakuratan penuh:
SELECT *
FROM OPENROWSET(
'CosmosDB',
'account=MyCosmosDbAccount;database=covid;region=westus2;key=C0Sm0sDbKey==',
Ecdc
) as rows
Hasil kueri ini mengembalikan tipe dan nilai yang diformat sebagai teks JSON:
tanggal_rep | Kasus | geo_id |
---|---|---|
{"tanggal":"2020-08-13"} | {"int32":"254"} | {"untai":"RS"} |
{"tanggal":"2020-08-12"} | {"int32":"235"} | {"untai":"RS"} |
{"tanggal":"2020-08-11"} | {"int32":"316"} | {"untai":"RS"} |
{"tanggal":"2020-08-10"} | {"int32":"281"} | {"untai":"RS"} |
{"tanggal":"2020-08-09"} | {"int32":"295"} | {"untai":"RS"} |
{"string":"2020/08/08"} | {"int32":"312"} | {"untai":"RS"} |
{"tanggal":"2020-08-07"} | {"float64":"339.0"} | {"untai":"RS"} |
Untuk setiap nilai, Anda dapat melihat jenis yang diidentifikasi dalam item kontainer Azure Cosmos DB. Sebagian besar nilai untuk date_rep
properti berisi date
nilai, tetapi beberapa di antaranya salah disimpan sebagai string di Azure Cosmos DB. Skema keakuratan penuh mengembalikan nilai yang diketik date
dengan benar dan nilai yang string
salah diformat.
Jumlah kasus disimpan sebagai int32
nilai, tetapi ada satu nilai yang dimasukkan sebagai angka desimal. Nilai ini memiliki tipe float64
. Jika ada beberapa nilai yang melebihi angka int32
terbesar, nilai tersebut akan disimpan sebagai tipe int64
. Semua nilai geo_id
dalam contoh ini disimpan sebagai tipe string
.
Penting
OPENROWSET
Fungsi tanpa sebuah WITH
klausul memaparkan kedua nilai dengan tipe yang diharapkan dan nilai dengan tipe yang salah dimasukkan. Fungsi ini dirancang untuk eksplorasi data dan bukan untuk pelaporan. Jangan mengurai nilai JSON yang dikembalikan dari fungsi ini untuk menyusun laporan. Gunakan klausul WITH untuk membuat laporan Anda. Anda harus menghapus nilai-nilai yang memiliki jenis tipe yang salah dalam kontainer Azure Cosmos DB untuk menerapkan koreksi dengan tingkat keakuratan penuh di penyimpanan analitik.
Untuk mengkueri Azure Cosmos DB untuk akun MongoDB, Anda dapat mempelajari selengkapnya tentang representasi skema keakuratan penuh di penyimpanan analitik dan nama properti yang diperluas yang akan digunakan di Apa itu Azure Cosmos DB Analytical Store?.
Kueri item dengan skema integritas penuh
Saat mengkueri skema keakuratan penuh, Anda perlu secara eksplisit menentukan tipe SQL dan tipe properti Azure Cosmos DB yang diperkirakan dalam WITH
klausul.
Dalam contoh berikut, kami berasumsi bahwa string
adalah jenis yang benar untuk properti geo_id
, dan int32
merupakan jenis yang benar untuk properti cases
.
SELECT geo_id, cases = SUM(cases)
FROM OPENROWSET(
'CosmosDB'
'account=MyCosmosDbAccount;database=covid;region=westus2;key=C0Sm0sDbKey==',
Ecdc
) WITH ( geo_id VARCHAR(50) '$.geo_id.string',
cases INT '$.cases.int32'
) as rows
GROUP BY geo_id
Nilai untuk geo_id
dan cases
yang memiliki jenis lain dikembalikan sebagai NULL
nilai. Kueri ini hanya mereferensikan cases
dengan jenis yang ditentukan dalam ekspresi (cases.int32
).
Jika Anda memiliki nilai dengan tipe lain (cases.int64
, cases.float64
) yang tidak dapat dibersihkan dalam kontainer Azure Cosmos DB, Anda harus secara eksplisit mereferensikannya dalam sebuah WITH
klausa dan menggabungkan hasilnya. Kueri berikut ini mengagregasi keduanya int32
, int64
, dan float64
disimpan di dalam kolom cases
:
SELECT geo_id, cases = SUM(cases_int) + SUM(cases_bigint) + SUM(cases_float)
FROM OPENROWSET(
'CosmosDB',
'account=MyCosmosDbAccount;database=covid;region=westus2;key=C0Sm0sDbKey==',
Ecdc
) WITH ( geo_id VARCHAR(50) '$.geo_id.string',
cases_int INT '$.cases.int32',
cases_bigint BIGINT '$.cases.int64',
cases_float FLOAT '$.cases.float64'
) as rows
GROUP BY geo_id
Dalam contoh ini, jumlah kasus disimpan sebagai nilai int32
, int64
, atau float64
. Semua nilai harus diekstrak untuk menghitung jumlah kasus per negara atau wilayah.
Pemecahan Masalah
Tinjau halaman bantuan mandiri untuk menemukan masalah yang diketahui atau langkah-langkah pemecahan masalah yang dapat membantu Anda mengatasi potensi masalah dengan kueri Azure Cosmos DB.
Konten terkait
- Menggunakan Power BI dan kumpulan Synapse SQL tanpa server untuk menganalisis data Azure Cosmos DB
- Membuat dan menggunakan tampilan menggunakan kumpulan SQL tanpa server
- Tutorial: Menjelajahi dan Menganalisis data lake dengan kumpulan SQL tanpa server
- Jika Anda mendapatkan kesalahan atau mengalami masalah performa, lihat Memecahkan masalah kumpulan SQL tanpa server
- Modul: Menerapkan Azure Synapse Link dengan Azure Cosmos DB