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.
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 | 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).
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 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.
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.
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 |
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.
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)
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')
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')
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) |
Hanya format IS08601 yang didukung.
Contoh:
TO_TIMESTAMP(string)
TO_TIMESTAMP('2007T')
Catatan
Anda juga dapat menggunakan fungsi UTCNOW
ini untuk mendapatkan waktu sistem.
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. |
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.
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[*]
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).