Mengkueri data Azure Cosmos DB dengan kumpulan SQL tanpa server di Azure Synapse Link
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 T-SQL yang tidak asing untuk mengkueri data dari penyimpanan analitik dan konektivitas terintegrasi ke berbagai alat kecerdasan bisnis (BI/Business Intelligence) dan kueri ad-hoc melalui antarmuka T-SQL.
Untuk mengkueri Azure Cosmos DB, area permukaan SELECT penuh 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.
Dalam artikel ini, Anda akan mempelajari cara menulis kueri dengan kumpulan SQL tanpa server yang akan 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.
Catatan
Anda tidak dapat menggunakan identitas terkelola untuk mengakses kontainer Azure Cosmos DB dari kumpulan SQL tanpa server.
Prasyarat
- Pastikan Anda telah menyiapkan Penyimpanan analitik:
- Aktifkan penyimpanan analitis pada kontainer Azure Cosmos DB Anda.
- Dapatkan string koneksi dengan kunci baca-saja yang akan Anda gunakan untuk meminta kueei Analytical Store.
- 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 besar dari 80GB), pertimbangkan untuk menggunakan lapisan penembolokan seperti layanan Analisis dan muat partisi yang lebih kecil dari 80GB dalam model layanan Analisis.
- Jika Anda memfilter data menggunakan kolom string, pastikan Anda menggunakan fungsi
OPENROWSET
dengan klausul eksplisitWITH
yang memiliki jenis sekecil mungkin (misalnya, jangan gunakan VARCHAR (1000) jika Anda tahu bahwa properti memiliki hingga 5 karakter).
Gambaran Umum
Kumpulan SQL tanpa server memungkinkan Anda untuk meminta penyimpanan analitik Azure Cosmos DB menggunakan OPENROWSET
fungsi.
OPENROWSET
dengan kunci sebaris. Sintaks ini dapat digunakan untuk mengkueri koleksi Azure Cosmos DB tanpa perlu menyiapkan kredensial.OPENROWSET
yang mereferensikan kredensial yang berisi kunci akun Azure Cosmos DB. Sintaks ini dapat digunakan untuk membuat tampilan pada koleksi Azure Cosmos DB.
Untuk mendukung kueri dan analisis data di dalam penyimpanan analitik Azure Cosmos DB, sebuah kumpulan SQL tanpa server akan digunakan. Kumpulan SQL tanpa server menggunakan OPENROWSET
sintaks SQL, jadi Anda harus terlebih dahulu mengonversi string koneksi Azure Cosmos DB Anda ke format ini:
OPENROWSET(
'CosmosDB',
'<SQL connection string for Azure Cosmos DB>',
<Container name>
) [ < with clause > ] AS alias
String koneksi SQL untuk Azure Cosmos DB menentukan nama akun Azure Cosmos DB, nama database, kunci master akun database, dan nama wilayah opsional ke OPENROWSET
fungsi tersebut. Beberapa informasi ini dapat diambil dari string koneksi Azure Cosmos DB standar.
Mengonversi dari format string koneksi Azure Cosmos DB standar:
AccountEndpoint=https://<database account name>.documents.azure.com:443/;AccountKey=<database account master key>;
String koneksi SQL memiliki format berikut:
'account=<database account name>;database=<database name>;region=<region name>;key=<database account master key>'
Wilayah ini bersifat opsional. Jika dihilangkan, wilayah utama kontainer digunakan.
Penting
Ada parameter opsional lain dalam string koneksi yang disebut endpoint
. Param endpoint
diperlukan untuk akun yang tidak cocok dengan format standar *.documents.azure.com
. Misalnya, jika akun Azure CosmosDB Anda diakhiri dengan .documents.azure.us
, pastikan Anda menambahkan endpoint=<account name>.documents.azure.us
di string koneksi.
Nama kontainer Azure Cosmos DB ditentukan tanpa tanda kutip di dalam OPENROWSET
sintaks. Jika nama kontainer memiliki karakter khusus, misalnya, tanda hubung (-), nama harus dibungkus dalam kurung siku ([]
) di dalam OPENROWSET
sintaks.
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
Kumpulan SQL tanpa server tidak mendukung kueri penyimpanan transaksional Azure Cosmos DB.
Sampel himpunan data
Contoh dalam artikel ini berdasarkan data dari European Centre for Disease Prevention and Control (ECDC) COVID-19 Cases dan COVID-19 Open Research Dataset (CORD-19), doi:10.5281/zenodo.3715505.
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 dengan dukungan Azure Synapse Link.
- Database Azure Cosmos DB yang dinamai
covid
. - Dua kontainer Azure Cosmos DB yang dinamai
Ecdc
danCord19
dimuat dengan kumpulan sampel data sebelumnya.
Anda dapat menggunakan string koneksi berikut untuk tujuan pengujian: Account=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==
. Perhatikan bahwa koneksi ini tidak akan menjamin kinerja karena akun ini dapat diletakan 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.
SELECT TOP 10 *
FROM OPENROWSET(
'CosmosDB',
'Account=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==',
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). Kami kemudian mengakses Ecdc
penyimpanan analitik kontainer di dalam West US 2
wilayah. Karena tidak ada proyeksi properti tertentu, OPENROWSET
fungsi ini akan 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:
date_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=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==',
Cord19) as cord19
Secara eksplisit menentukan skema
Sementara kemampuan inferensi skema otomatis dalam OPENROWSET
menyediakan kueri yang sederhana dan mudah untuk digunakan, skenario bisnis Anda mungkin membutuhkan Anda untuk secara eksplisit menentukan skema baca-saja pada properti yang relevan dari data Azure Cosmos DB.
Fungsi OPENROWSET
ini memampukan Anda untuk secara eksplisit menentukan properti apa yang ingin Anda baca dari data dalam kontainer dan untuk menentukan tipe 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. OPENROWSET
Fungsi ini memampukan Anda untuk menentukan subset properti yang ingin Anda baca dan tipe kolom yang tepat dalam WITH
klausul:
SELECT TOP 10 *
FROM OPENROWSET(
'CosmosDB',
'Account=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==',
Ecdc
) with ( date_rep varchar(20), cases bigint, geo_id varchar(6) ) as rows
Hasil kueri ini mungkin terlihat seperti pada tabel berikut ini:
date_rep | kasus | geo_id |
---|---|---|
2020-08-13 | 254 | RS |
2020-08-12 | 235 | RS |
2020-08-11 | 163 | RS |
Untuk informasi selengkapnya tentang tipe SQL yang sebaiknya digunakan untuk nilai Azure Cosmos DB, lihat aturan untuk pemetaan tipe SQL pada akhir artikel.
Buat tampilan
Membuat tampilan di master
atau database default tidak disarankan atau didukung. Jadi Anda perlu membuat database pengguna untuk tampilan 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 terpisah dan mereferensikan kredensial ini dari OPENROWSET
fungsi. Jangan menyimpan kunci akun Anda dalam definisi tampilan.
CREATE CREDENTIAL MyCosmosDbAccountCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = 's5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==';
GO
CREATE OR ALTER VIEW Ecdc
AS SELECT *
FROM OPENROWSET(
PROVIDER = 'CosmosDB',
CONNECTION = 'Account=synapselink-cosmosdb-sqlsample;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 hal ini mungkin berdampak pada kinerja Anda. Pastikan Anda menggunakan ukuran terkecil, bila memungkinkan, untuk kolom Anda (misalnya VARCHAR(100) dan bukan VARCHAR(8000) default). Anda sebaiknya menggunakan beberapa kolase UTF-8 sebagai kolase database default atau mengaturnya sebagai kolase kolom eksplisit untuk menghindari masalah konversi UTF-8. Pemeriksaan 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. Ini mungkin berarti bahwa tampilan mereferensikan kolom atau objek yang 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=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==',
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:
paper_id | title | metadata | penulis |
---|---|---|---|
bb11206963e831f… | Informasi Tambahan eko-epidemi An... | {"title":"Supplementary Informati… |
[{"first":"Julien","last":"Mélade","suffix":"","af… |
bb1206963e831f1… | Penggunaan Sera Konvalesen dalam Imun Tubuh-E… | {"title":"The Use of Convalescent… |
[{"first":"Antonio","last":"Lavazza","suffix":"", … |
bb378eca9aac649… | Tylosema esculentum (Marama) Tuber dan B… | {"title":"Tylosema esculentum (Ma… |
[{"first":"Walter","last":"Chingwaru","suffix":"",… |
Pelajari selengkapnya tentang menganalisis jenis data kompleks seperti file dan kontainer Parquet di Azure Synapse Link untuk Azure Cosmos DB atau struktur berlapis dalam 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.
Ubah 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 telah menumpukkan subarray seperti array penulis dari kumpulan 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 untuk "menggabungkan" properti dari item yang di atas (metadata) dengan semua elemen array (penulis). Kumpulan SQL tanpa server memampukan Anda untuk meratakan struktur bertumpuk dengan menerapkan OPENJSON
fungsi pada array bertumpuk:
SELECT
*
FROM
OPENROWSET(
'CosmosDB',
'Account=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==',
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:
title | penulis | pertama | terakhir | afiliasi |
---|---|---|---|---|
Informasi Tambahan eko-epidemi An... | [{"first":"Julien","last":"Mélade","suffix":"","affiliation":{"laboratory":"Centre de Recher… |
Julien | Mélade | {"laboratory":"Centre de Recher… |
Informasi Tambahan eko-epidemi An... | [{"first":"Nicolas","last":"4#","suffix":"","affiliation":{"laboratory":"","institution":"U… |
Nicolas | #4 | {"laboratory":"","institution":"U… |
Informasi Tambahan eko-epidemi An... | [{"first":"Beza","last":"Ramazindrazana","suffix":"","affiliation":{"laboratory":"Centre de Recher… |
Beza | Ramazindrazana | {"laboratory":"Centre de Recher… |
Informasi Tambahan eko-epidemi An... | [{"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. Ubah 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 di luar kotak, yang mencakup penanganan tipe data bertumpuk yang memungkinkan kueri kaya dari kumpulan SQL tanpa server. 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 dari SQL (Core) API mendukung tipe properti JSON angka, untai, Boolean, null, objek bersarang, 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 | bit |
Bilangan bulat | bigint |
Decimal | float |
String | varchar (kolase database UTF-8) |
Waktu tanggal (untai berformat ISO) | varchar(30) |
Waktu tanggal (tanda waktu UNIX) | bigint |
Null | any SQL type |
Objek atau array yang bertumpuk | varchar(max) (kolase 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 akan mengembalikan tipe dan nilai yang diformat sebagai teks JSON:
date_rep | kasus | geo_id |
---|---|---|
{"date":"2020-08-13"} | {"int32":"254"} | {"untai":"RS"} |
{"date":"2020-08-12"} | {"int32":"235"} | {"untai":"RS"} |
{"date":"2020-08-11"} | {"int32":"316"} | {"untai":"RS"} |
{"date":"2020-08-10"} | {"int32":"281"} | {"untai":"RS"} |
{"date":"2020-08-09"} | {"int32":"295"} | {"untai":"RS"} |
{"untai":"2020/08/08"} | {"int32":"312"} | {"untai":"RS"} |
{"date":"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 untai di Azure Cosmos DB. Skema keakuratan penuh akan mengembalikan nilai yang diketik dengan benar date
dan nilai yang salah diformat string
.
Jumlah kasus adalah informasi yang 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 sebuah klausul WITH untuk membuat laporan Anda. Anda harus membersihkan nilai yang memiliki tipe yang salah dalam kontainer Azure Cosmos DB untuk menerapkan koreksi di dalam penyimpanan analitik keakuratan penuh.
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?.
Item kueri dengan skema keakuratan 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 akan menganggap bahwa string
adalah tipe yang benar untuk properti geo_id
dan int32
merupakan tipe 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 tipe lain akan dikembalikan sebagai NULL
nilai. Kueri ini hanya akan mereferensikan cases
tipe 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/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.
Langkah berikutnya
Untuk informasi lebih lanjut, baca artikel berikut:
- Menggunakan Power BI dan kumpulan SQL tanpa server dengan Azure Synapse Link
- Membuat dan menggunakan tampilan di dalam kumpulan SQL tanpa server
- Tutorial tentang membangun tampilan kumpulan SQL tanpa server di Azure Cosmos DB dan menghubungkannya ke model Power BI melalui DirectQuery
- Kunjungi tautan Azure Synapse untuk halaman bantuan mandiri Azure Cosmos DB jika Anda mendapatkan beberapa kesalahan atau mengalami masalah performa.
- Lihat modul Pelajari tentang cara Mengkueri Azure Cosmos DB dengan SQL Tanpa Server untuk Azure Synapse Analytics.