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.
Tip
Microsoft Fabric Data Warehouse adalah gudang relasional skala perusahaan pada fondasi data lake, dengan arsitektur siap masa depan, AI bawaan, dan fitur baru. Jika Anda baru menggunakan pergudangan data, mulailah dengan Fabric Data Warehouse. Beban kerja kumpulan SQL terdedikasi yang ada dapat ditingkatkan ke Fabric untuk mengakses kemampuan baru di seluruh ilmu data, analitik waktu nyata, dan pelaporan.
Penting
Synapse Link untuk Cosmos DB tidak lagi didukung untuk proyek baru. Jangan gunakan fitur ini.
Silakan gunakan Azure Cosmos DB Mirroring untuk Microsoft Fabric yang sekarang menjadi GA. Pencerminan memberikan manfaat tanpa ETL yang sama dan diintegrasikan sepenuhnya dengan Microsoft Fabric. Pelajari lebih lanjut tentang Gambaran Umum Pencerminan Cosmos DB.
Kumpulan SQL tanpa server memungkinkan Anda menganalisis data dalam kontainer Azure Cosmos DB yang diaktifkan dengan Azure Synapse Link hampir real time tanpa memengaruhi performa beban kerja transaksi anda. Ini menawarkan sintaks Transact-SQL (T-SQL) yang familier untuk melakukan kueri data dari penyimpanan analitik, dan konektivitas terintegrasi ke berbagai alat kecerdasan bisnis (BI) serta kueri ad-hoc melalui antarmuka T-SQL.
Untuk melakukan kueri pada Azure Cosmos DB, area permukaan penuh SELECT didukung melalui fungsi OPENROWSET, yang mencakup sebagian besar fungsi dan operator SQL. Anda juga bisa 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 pilih (CETAS). 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 atas kontainer Azure Cosmos DB dan menghubungkannya ke model Power BI dalam tutorial this. Tutorial ini menggunakan kontainer dengan skema Azure Cosmos DB terdefinisi dengan baik. Anda juga dapat mempelajari modul Learn tentang cara membuat kueri Azure Cosmos DB dengan SQL Serverless untuk Azure Synapse Analytics.
Prasyarat
- Pastikan Anda menyiapkan penyimpanan data analitik.
- Aktifkan penyimpanan analitis di kontainer Azure Cosmos DB Anda.
- Dapatkan string koneksi dengan kunci baca-saja yang bisa Anda gunakan untuk mengkueri penyimpanan analitik.
- Dapatkan kunci hanya-baca 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 bahwa 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
OPENROWSETfungsi dengan klausa eksplisitWITHyang 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 mengkueri penyimpanan analitik Azure Cosmos DB menggunakan fungsi OPENROWSET.
OPENROWSET(
'CosmosDB',
'<SQL connection string for Azure Cosmos DB>',
<other parameters>
) [ < with clause > ] AS alias
Connection string SQL untuk Azure Cosmos DB mencakup komponen berikut:
- account - 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 berakhir 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>;
Connection string SQL dapat diformat sebagai berikut:
account=<database account name>;database=<database name>;region=<region name>
Connection string ini tidak menyertakan informasi autentikasi yang diperlukan untuk terhubung ke penyimpanan analitik Cosmos DB. Informasi tambahan diperlukan tergantung pada jenis autentikasi yang digunakan:
- Jika
OPENROWSETmenggunakan identitas terkelola ruang kerja untuk mengakses penyimpanan analitik, Anda harus menambahkan propertiAuthType. - Jika
OPENROWSETmenggunakan kunci akun sebaris, Anda harus menambahkan propertikey. Ini memungkinkan Anda untuk mengkueri koleksi Azure Cosmos DB tanpa perlu menyiapkan kredensial. - Alih-alih menyertakan informasi autentikasi di string koneksi,
OPENROWSETdapat 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 (account, database, region, dan endpoint), Anda perlu menambahkan one dari opsi berikut:
-
AuthType - atur opsi ini ke
ManagedIdentityjika 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 untuk ruang kerja Synapse | account=<account name>;database=<db name>;region=<region name>;AuthType=ManagedIdentity |
| Kunci utama 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 string 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 kueri pada penyimpanan transaksi 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).
Untuk mengikuti artikel ini yang memperlihatkan cara mengkueri data Azure Cosmos DB dengan kumpulan SQL tanpa server, pastikan Anda membuat sumber daya berikut:
- Akun database Azure Cosmos DB yang Azure Synapse Link diaktifkan
- Database Azure Cosmos DB yang bernama
covid - Dua kontainer Azure Cosmos DB bernama
EcdcdanCord19dimuat 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.
Menjelajahi data Azure Cosmos DB dengan inferensi skema otomatis
Cara term mudah untuk menjelajahi data di Azure Cosmos DB adalah dengan menggunakan kemampuan inferensi skema otomatis. Dengan menghilangkan klausul WITH dari pernyataan OPENROWSET, Anda dapat menginstruksikan kumpulan SQL tanpa server untuk secara otomatis (menyimpulkan) skema penyimpanan analitik 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 terhubung ke database covid di akun Azure Cosmos DB MyCosmosDbAccount diautentikasi dengan menggunakan kunci Azure Cosmos DB (dummy dalam contoh sebelumnya). Kemudian, kami mengakses toko analitik dari Ecdc kontainer di wilayah West US 2. Karena tidak ada proyeksi properti tertentu, fungsi OPENROWSET mengembalikan semua properti dari item Azure Cosmos DB.
Dengan asumsi bahwa item dalam kontainer Azure Cosmos DB memiliki properti date_rep, cases, dan geo_id, 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 menjelajahi data dari kontainer lain dalam 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 di OPENROWSET memberikan pengalaman yang sederhana dan mudah digunakan, skenario bisnis Anda mungkin mengharuskan Anda untuk secara eksplisit menentukan skema hanya untuk 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 kita bayangkan bahwa kita telah mengimpor beberapa data dari himpunan data COVID ECDC 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 JSON datar ini dalam Azure Cosmos DB dapat direpresentasikan sebagai sekumpulan baris dan kolom di 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 Azure Cosmos DB ke pemetaan jenis 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 mengidentifikasi skema, Anda dapat menyiapkan tampilan di atas data Azure Cosmos DB Anda. Anda harus menempatkan kunci akun Azure Cosmos DB Anda dalam kredensial terpisah dan mereferensikan 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 mewakili model data yang lebih kompleks dengan menyusunnya sebagai objek atau array berlapis. Kemampuan autosinkronisasi Azure Synapse Link untuk Azure Cosmos DB secara otomatis mengelola representasi skema di penyimpanan analitik, termasuk penanganan jenis data berlapis 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 berlapis di Azure Cosmos DB direpresentasikan sebagai string JSON dalam hasil kueri saat fungsi OPENROWSET 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 analisis jenis data kompleks di Azure Synapse Analytics atau kueri tipe bersarang 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
Azure Cosmos DB data mungkin memiliki subarray berlapis seperti array penulis dari himpunan 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.
Azure Cosmos DB ke perangkaian jenis SQL
Meskipun penyimpanan transaksional Azure Cosmos DB bersifat agnostik skema, penyimpanan analitik mempunyai skema untuk mengoptimalkan performa kueri analitis. Dengan kemampuan sinkronisasi otomatis Azure Synapse Link, Azure Cosmos DB mengelola representasi skema di penyimpanan analitik di luar kotak, yang mencakup penanganan jenis data berlapis. Karena serverless SQL pool mengkueri penyimpanan analitik, penting untuk memahami cara memetakan jenis data input Azure Cosmos DB ke jenis data SQL.
akun Azure Cosmos DB API SQL (Core) mendukung jenis properti JSON number, string, Boolean, null, objek nested, 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 harus digunakan untuk jenis properti yang berbeda dalam Azure Cosmos DB.
| jenis properti Azure Cosmos DB | Tipe kolom SQL |
|---|---|
| Boolean | sedikit |
| Integer | bigint |
| Desimal | float |
| 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
Azure Cosmos DB skema keakuratan penuh mencatat nilai dan jenis 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 properti 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. Untuk mengoreksi nilai yang memiliki jenis yang salah dalam kontainer Azure Cosmos DB, Anda perlu membersihkan data tersebut agar bisa diterapkan koreksi di penyimpanan analitik dengan akurasi 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?
Kueri item dengan skema integritas penuh
Saat mengkueri skema keakuratan penuh, Anda perlu secara eksplisit menentukan jenis SQL dan jenis properti Azure Cosmos DB yang diharapkan dalam klausa WITH.
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 jenis lain (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 self-help untuk menemukan masalah yang diketahui atau langkah-langkah pemecahan masalah yang dapat membantu Anda mengatasi potensi masalah dengan kueri Azure Cosmos DB.
Konten terkait
- Gunakan Power BI dan kumpulan SQL Synapse 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
- Module: Terapkan Azure Synapse Link dengan Azure Cosmos DB