Bagikan melalui


Mengkueri data Azure Cosmos DB menggunakan kumpulan SQL tanpa server

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 eksplisit WITH yang memiliki jenis sekecil mungkin. Misalnya, jangan gunakan VARCHAR(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 menambahkan AuthType properti.
  • Jika OPENROWSET menggunakan kunci akun sebaris, Anda harus menambahkan key 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 dan Cord19 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ÃÂ&copy;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ÃÂ&copy;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.