Bagikan melalui


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:
  • 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 eksplisit WITH 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 dan Cord19 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. OPENROWSETFungsi 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ÃÂ&copy;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ÃÂ&copy;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: