Referensi bahasa pemrogram SQL akselerasi kueri

Akselerasi kueri mendukung bahasa pemrogram seperti ANSI SQL untuk mengekspresikan kueri melalui konten blob. Dialek SQL akselerasi kueri adalah subset ANSI SQL, dengan set terbatas jenis data yang didukung, operator, dll., tetapi juga diperluas dalam ANSI SQL untuk mendukung kueri melalui format data semi-terstruktur hierarkis seperti JSON.

Sintaks SELECT

Satu-satunya pernyataan SQL yang didukung oleh akselerasi kueri adalah pernyataan SELECT. Contoh ini mengembalikan setiap baris yang ekspresinya menghasilkan true.

SELECT * FROM table [WHERE expression] [LIMIT limit]

Untuk data berformat CSV, tabel harus BlobStorage. Ini berarti kueri akan dijalankan terhadap blob mana pun yang ditentukan dalam panggilan REST. Untuk data yang diformat JSON, tabel adalah "deskriptor tabel." Lihat bagian Deskriptor Tabel di artikel ini.

Pada contoh berikut, untuk setiap baris ekspresi WHERE menghasilkan true, pernyataan ini akan mengembalikan baris baru yang dibuat dengan mengevaluasi setiap ekspresi proyeksi.

SELECT expression [, expression ...] FROM table [WHERE expression] [LIMIT limit]

Anda bisa menentukan satu atau beberapa kolom tertentu sebagai bagian dari ekspresi SELECT (misalnya, SELECT Title, Author, ISBN).

Catatan

Jumlah maksimum kolom tertentu yang bisa Anda gunakan dalam ekspresi SELECT adalah 49. Jika Anda memerlukan pernyataan SELECT untuk mengembalikan lebih dari 49 kolom, maka gunakan karakter wildcard (*) untuk ekspresi SELECT (Misalnya: SELECT *).

Contoh berikut ini menghasilkan perhitungan agregat (Misalnya: nilai rata-rata kolom tertentu) terhadap setiap baris yang ekspresinya menghasilkan true.

SELECT aggregate_expression FROM table [WHERE expression] [LIMIT limit]

Contoh berikut ini menghasilkan offset yang sesuai untuk pemisahan blob berformat CSV. Lihat bagian Sys.Split pada artikel ini.

SELECT sys.split(split_size)FROM BlobStorage

Jenis Data

Jenis Data Deskripsi
INT Bilangan bulat bertanda 64-bit.
FLOAT Titik mengambang 64-bit ("presisi ganda").
STRING Untai (karakter) Unicode dengan panjang variabel.
TIMESTAMP Titik waktu.
BOOLEAN Benar atau salah.

Saat membaca nilai dari data berformat CSV, semua nilai dibaca sebagai untai (karakter). Nilai untai (karakter) dapat dikonversi ke jenis lain menggunakan ekspresi CAST. Nilai mungkin secara implisit ditransmisikan ke jenis lain tergantung pada konteks. untuk informasi selengkapnya, lihat Jenis data yang diutamakan (T-SQL).

Expressions

Bidang referensi

Untuk data berformat JSON, atau data berformat CSV dengan baris header, bidang dapat direferensikan berdasarkan nama. Nama bidang dapat menggunakan tanda kutip atau tanpa tanda kutip. Nama bidang yang dikutip disertakan dengan karakter tanda petik ganda ("), dapat berisi spasi, dan peka huruf besar/kecil. Jika tidak dikutip, nama bidang tidak peka huruf besar/kecil, dan tidak boleh memuat karakter khusus.

Dalam data berformat CSV, bidang juga dapat direferensikan oleh karakter ordinal, diawali dengan karakter garis bawah (_). Misalnya, bidang pertama dapat direferensikan sebagai _1, atau bidang kesebelas dapat direferensikan sebagai _11. Mereferensikan bidang secara ordinal berguna untuk data berformat CSV yang tidak berisi baris header. Dalam hal ini satu-satunya cara untuk mereferensikan bidang tertentu adalah dengan ordinal.

Operator

Operator SQL standar berikut didukung:

Operator Deskripsi
= Membandingkan kesetaraan dua ekspresi (operator perbandingan).
!= Menguji apakah satu ekspresi tidak sama dengan ekspresi lain (operator perbandingan).
<> Membandingkan dua ekspresi agar tidak sama dengan (operator perbandingan).
< Membandingkan dua ekspresi agar kurang dari (operator perbandingan).
<= Membandingkan dua ekspresi agar kurang dari atau sama dengan (operator perbandingan).
> Membandingkan dua ekspresi agar lebih besar dari (operator perbandingan).
>= Membandingkan dua ekspresi agar lebih besar dari atau sama dengan (operator perbandingan).
+ Menambahkan dua angka. Penambahan operator aritmetika ini juga dapat menambahkan angka, hari, hingga tanggal.
- Mengurangi dua angka (operator pengurangan aritmetika).
/ Membagi satu angka dengan angka lain (operator pembagian aritmetika).
* Mengalikan dua ekspresi (operator perkalian aritmetika).
% Menghasilkan sisa satu angka dibagi dengan angka lainnya.
AND Melakukan operasi logika per bit AND di antara dua nilai bilangan bulat.
OR Melakukan operasi logika per bit OR operasi antara dua nilai bilangan bulat yang ditentukan seperti yang diterjemahkan ke ekspresi biner dalam pernyataan T-SQL.
NOT Meniadakan input Boolean.
CAST Mengonversikan ekspresi satu jenis data ke jenis data lainnya.
BETWEEN Menentukan rentang yang akan diuji.
IN Menentukan apakah nilai yang ditentukan cocok dengan nilai mana pun dalam kueri bertumpuk atau daftar.
NULLIF Menghasilkan nilai null jika dua ekspresi yang ditentukan sama.
COALESCE Mengevaluasi argumen secara berurutan dan menghasilkan nilai terkini dari ekspresi pertama yang awalnya tidak dievaluasi ke NULL.

Jika jenis data di sebelah kiri dan kanan operator berbeda, maka konversi otomatis akan dilakukan sesuai dengan aturan yang ditentukan di sini: Jenis data yang diutamakan (T-SQL).

Bahasa pemrogram SQL akselerasi kueri hanya mendukung subset jenis data yang sangat kecil yang dibahas dalam artikel tersebut. Lihat bagian Jenis Data di artikel ini.

Mentransmisikan

Bahasa pemrogram SQL akselerasi kueri mendukung operator CAST, sesuai dengan aturan di sini: Konversi jenis data (Mesin Database).

Bahasa pemrogram SQL akselerasi kueri hanya mendukung subset tipe data kecil yang dibahas dalam artikel tersebut. Lihat bagian Jenis Data di artikel ini.

Fungsi untai (karakter)

Bahasa pemrogram SQL akselerasi kueri mendukung fungsi untai (karakter) SQL standar berikut:

Fungsi Deskripsi
CHAR_LENGTH Menghasilkan panjang karakter ekspresi untai (karakter), jika ekspresi untai (karakter) adalah jenis data karakter; sebaliknya, menghasilkan panjang dalam byte ekspresi untai (karakter) (bilangan bulat terkecil tidak kurang dari jumlah bit yang dibagi dengan 8). (Fungsi ini sama dengan fungsi CHARACTER_LENGTH.)
CHARACTER_LENGTH Menghasilkan panjang karakter ekspresi untai (karakter), jika ekspresi untai (karakter) adalah jenis data karakter; sebaliknya, menghasilkan panjang dalam byte ekspresi untai (karakter) (bilangan bulat terkecil tidak kurang dari jumlah bit yang dibagi dengan 8). (Fungsi ini sama dengan fungsi CHARACTER_LENGTH
LOWER Menghasilkan ekspresi karakter setelah mengonversi data karakter huruf besar menjadi huruf kecil.
UPPER Menghasilkan ekspresi karakter dengan data karakter huruf kecil dikonversi menjadi huruf besar.
SUBSTRING Menghasilkan bagian dari karakter, biner, teks, atau ekspresi gambar di SQL Server.
TRIM Menghapus karakter char spasi (32) atau karakter tertentu lainnya dari awal dan akhir untai (karakter).
LEADING Menghapus karakter spasi (32) atau karakter tertentu lainnya dari awal untai (karakter).
TRAILING Menghapus karakter spasi (32) atau karakter tertentu lainnya dari akhir untai (karakter).

Berikut adalah beberapa contohnya.

Fungsi Contoh Hasil
CHARACTER_LENGTH SELECT CHARACTER_LENGTH('abcdefg') from BlobStorage 7
CHAR_LENGTH SELECT CHAR_LENGTH(_1) from BlobStorage 1
LOWER SELECT LOWER('AbCdEfG') from BlobStorage abcdefg
UPPER SELECT UPPER('AbCdEfG') from BlobStorage ABCDEFG
SUBSTRING SUBSTRING('123456789', 1, 5) 23456
TRIM TRIM(BOTH '123' FROM '1112211Microsoft22211122') Microsoft

Fungsi tanggal

Berikut adalah dukungan untuk fungsi tanggal SQL standar:

  • DATE_ADD
  • DATE_DIFF
  • EXTRACT
  • TO_STRING
  • TO_TIMESTAMP

Saat ini semua format tanggal IS08601 standar telah dikonversi.

Fungsi DATE_ADD

Bahasa pemrogram SQL akselerasi kueri mendukung tahun, bulan, hari, jam, menit, detik agar DATE_ADD berfungsi.

Contoh:

DATE_ADD(datepart, quantity, timestamp)
DATE_ADD('minute', 1, CAST('2017-01-02T03:04:05.006Z' AS TIMESTAMP)

Fungsi DATE_DIFF

Bahasa pemrogram SQL akselerasi kueri mendukung tahun, bulan, hari, jam, menit, detik agar DATE_DIFF berfungsi.

DATE_DIFF(datepart, timestamp, timestamp)
DATE_DIFF('hour','2018-11-09T00:00+05:30','2018-11-09T01:00:23-08:00') 

Fungsi EXTRACT

Untuk EXTRACT selain bagian tanggal yang didukung untuk fungsi DATE_ADD, bahasa pemrogram SQL akselerasi kueri mendukung timezone_hour dan timezone_minute sebagai bagian tanggal.

Contoh:

EXTRACT(datepart FROM timestampstring)
EXTRACT(YEAR FROM '2010-01-01T')

Fungsi TO_STRING

Contoh:

TO_STRING(TimeStamp , format)
TO_STRING(CAST('1969-07-20T20:18Z' AS TIMESTAMP),  'MMMM d, y')

Tabel ini menjelaskan string yang bisa Anda gunakan untuk menentukan format output fungsi TO_STRING.

Memformat untai (karakter) Output
yy Tahun berformat 2 digit – 1999 sebagai '99'
y Tahun berformat 4 digit
yyyy Tahun berformat 4 digit
M Bulan dalam setahun - 1
MM Bulan dengan awalan nol - 01
MMM Singkatan bulan dalam setahun - JAN
MMMM Bulan penuh - Mei
d Hari dalam sebulan (1-31)
dd Hari bulan dengan awalan nol (01-31)
a AM atau PM
h Jam hari (1-12)
hh Jam hari dengan awalan nol (01-12)
H Jam hari (0-23)
HH Jam Hari dengan awalan nol (00-23)
m Menit jam (0-59)
mm Menit dengan awalan nol (00-59)
s Detik dari Menit (0-59)
ss Detik dengan awalan nol (00-59)
S Pecahan Detik (0,1-0,9)
SS Pecahan Detik (0,01-0,99)
SSS Pecahan Detik (0,001-0,999)
X Offset dalam Jam
XX atau XXXX Offset dalam jam dan menit (+0430)
XXX atau XXXXX Offset dalam jam dan menit (-07:00)
x Offset dalam jam (7)
xx atau xxxx Offset dalam jam dan menit (+0530)
Xxx atau xxxxx Offset dalam jam dan menit (+05:30)

Fungsi TO_TIMESTAMP

Hanya format IS08601 yang didukung.

Contoh:

TO_TIMESTAMP(string)
TO_TIMESTAMP('2007T')

Catatan

Anda juga dapat menggunakan fungsi UTCNOW ini untuk mendapatkan waktu sistem.

Ekspresi Agregat

Pernyataan SELECT mungkin berisi satu atau beberapa ekspresi proyeksi atau ekspresi agregat tunggal. Ekspresi agregat berikut didukung:

Ekspresi Deskripsi
COUNT(*) Menghasilkan jumlah rekaman yang cocok dengan ekspresi predikat.
COUNT(expression) Menghasilkan jumlah rekaman yang ekspresinya bukan nol.
AVG(ekspresi) Menghasilkan rata-rata nilai ekspresi bukan nol.
MIN(expression) Menghasilkan nilai minimum ekspresi bukan nol.
MAX(expression Menghasilkan nilai maksimum ekspresi bukan nol.
SUM(expression) Menghasilkan jumlah semua nilai ekspresi bukan nol.

MISSING

Operator IS MISSING adalah satu-satunya nonstandar yang didukung bahasa pemrogram SQL akselerasi kueri. Untuk data JSON, jika ada bidang hilang dari rekaman input tertentu, bidang ekspresi IS MISSING akan mengevaluasi ke nilai Boolean yang benar.

Pendeskripsi Tabel

Untuk data CSV, nama tabel selalu BlobStorage. Contohnya:

SELECT * FROM BlobStorage

Untuk data JSON, tersedia opsi tambahan:

SELECT * FROM BlobStorage[*].path

Ini memungkinkan kueri atas subset data JSON.

Untuk kueri JSON, Anda dapat menyebutkan jalur di bagian klausul FROM. Jalur ini akan membantu memilah subset data JSON. Jalur ini dapat merujuk ke nilai larik JSON dan Object.

Mari kita ambil contoh untuk memahami ini secara lebih terperinci.

Ini adalah data sampel kita:

{
  "id": 1,
  "name": "mouse",
  "price": 12.5,
  "tags": [
    "wireless",
    "accessory"
  ],
  "dimensions": {
    "length": 3,
    "width": 2,
    "height": 2
  },
  "weight": 0.2,
  "warehouses": [
    {
      "latitude": 41.8,
      "longitude": -87.6
    }
  ]
}

Anda mungkin hanya tertarik pada warehouses objek JSON dari data di atas. Objek warehouses bertipe larik JSON, sehingga Anda dapat menyebutkan ini dalam klausul FROM. Contoh kueri Anda bisa terlihat seperti ini.

SELECT latitude FROM BlobStorage[*].warehouses[*]

Kueri mendapatkan semua bidang tetapi hanya memilih garis lintang.

Jika Anda ingin mengakses nilaidimensions objek JSON saja, gunakan referensi ke objek tersebut di kueri Anda. Contohnya:

SELECT length FROM BlobStorage[*].dimensions

Ini juga membatasi akses Anda ke anggota objek dimensions. Jika Anda ingin mengakses anggota bidang JSON lainnya dan nilai dalam objek JSON, Anda dapat menggunakan kueri seperti yang diperlihatkan dalam contoh berikut:

SELECT weight,warehouses[0].longitude,id,tags[1] FROM BlobStorage[*]

Catatan

BlobStorage dan BlobStorage[*] keduanya merujuk ke seluruh objek. Namun, jika Anda memiliki jalur dalam klausul FROM, maka Anda harus gunakan jalur BlobStorage[*]

Sys.Split

Ini adalah bentuk khusus dari pernyataan SELECT, yang hanya tersedia untuk data berformat CSV.

SELECT sys.split(split_size) FROM BlobStorage

Gunakan pernyataan ini ketika Anda ingin mengunduh lalu memproses rekaman data CSV dalam batch. Dengan begitu Anda dapat memproses rekaman secara paralel alih-alih harus mengunduh semua rekaman sekaligus. Pernyataan ini tidak menghasilkan rekaman dari file CSV. Sebaliknya, ia menghasilkan kumpulan ukuran batch. Anda kemudian dapat menggunakan setiap ukuran batch untuk mengambil kumpulan rekaman data.

Gunakan parameter split_size untuk menentukan jumlah byte yang Anda inginkan untuk menampung setiap batch. Misalnya, jika Anda hanya ingin memproses 10 MB data sekaligus, pernyataan Anda akan terlihat seperti ini: SELECT sys.split(10485760)FROM BlobStorage karena 10 MB sama dengan 10.485.760 byte. Setiap batch akan berisi sebanyak mungkin rekaman yang bisa dimasukkan ke dalam 10 MB tersebut.

Dalam kebanyakan kasus, ukuran setiap batch akan sedikit lebih tinggi dari angka yang Anda tentukan. Itu karena batch tidak dapat berisi rekaman parsial. Jika rekaman terakhir dalam batch dimulai sebelum akhir ambang batas Anda, batch akan lebih besar sehingga dapat berisi rekaman lengkap. Ukuran batch terakhir kemungkinan akan lebih kecil dari ukuran yang Anda tentukan.

Catatan

Jumlah split_size harus minimal 10 MB (10485760).

Lihat juga