Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Siapkan penyortiran khusus bahasa untuk hasil kueri Amazon Redshift menggunakan UDF Python skalar
Ethan Stark, Amazon Web Services
Ringkasan
Pola ini menyediakan langkah-langkah dan kode contoh untuk menggunakan skalar Python UDF (fungsi yang ditentukan pengguna) untuk menyiapkan penyortiran linguistik yang tidak peka huruf besar/kecil untuk hasil kueri Amazon Redshift. Anda perlu menggunakan UDF Python skalar karena Amazon Redshift mengembalikan hasil berdasarkan urutan UTF-8 biner dan tidak mendukung penyortiran khusus bahasa. UDF Python adalah kode pemrosesan non-SQL yang didasarkan pada program Python 2.7 dan berjalan di gudang data. Anda dapat menjalankan kode UDF Python dengan pernyataan SQL dalam satu query. Untuk informasi selengkapnya, lihat Pengantar Python UDFs di postingan Blog Big Data Amazon Redshift
Data sampel dalam pola ini didasarkan pada alfabet Turki untuk tujuan demonstrasi. UDF Python skalar dalam pola ini dibuat untuk membuat hasil kueri default Amazon Redshift sesuai dengan urutan linguistik karakter dalam bahasa Turki. Untuk informasi selengkapnya, lihat contoh bahasa Turki di bagian Informasi tambahan dari pola ini. Anda dapat memodifikasi UDF Python skalar dalam pola ini untuk bahasa lain.
Prasyarat dan batasan
Prasyarat
Cluster Amazon Redshift dengan database, skema, dan tabel
Pengguna Amazon Redshift dengan izin CREATE TABLE dan CREATE FUNCTION
Python 2.7
atau yang lebih baru
Batasan
Penyortiran linguistik yang digunakan oleh kueri dalam pola ini tidak peka huruf besar/kecil.
Arsitektur
Tumpukan teknologi
Amazon Redshift
Python UDF
Alat
Layanan AWS
Amazon Redshift adalah layanan gudang data skala petabyte terkelola di AWS Cloud. Amazon Redshift terintegrasi dengan data lake Anda, yang memungkinkan Anda menggunakan data Anda untuk memperoleh wawasan baru untuk bisnis dan pelanggan Anda.
Alat-alat lainnya
Python (UDFs) fungsi yang ditentukan pengguna adalah fungsi
yang dapat Anda tulis dengan Python dan kemudian memanggil dalam pernyataan SQL.
Epik
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Buat tabel untuk data sampel Anda. | Untuk membuat tabel di Amazon Redshift dan menyisipkan data sampel ke dalam tabel, gunakan pernyataan SQL berikut:
catatanNama depan dalam data sampel termasuk karakter khusus dari alfabet Turki. Untuk informasi lebih lanjut tentang pertimbangan bahasa Turki untuk contoh ini, lihat contoh bahasa Turki di bagian Informasi tambahan dari pola ini. | Insinyur data |
Periksa penyortiran default dari data sampel. | Untuk melihat pengurutan default data sampel Anda di Amazon Redshift, jalankan kueri berikut:
Kueri mengembalikan daftar nama depan dari tabel yang Anda buat sebelumnya:
Hasil kueri tidak dalam urutan yang benar karena urutan UTF-8 biner default tidak mengakomodasi urutan linguistik karakter khusus Turki. | Insinyur data |
Buat UDF Python skalar. | Untuk membuat UDF Python skalar, gunakan kode SQL berikut:
| Insinyur data |
Kueri data sampel. | Untuk melakukan query data sampel dengan menggunakan UDF Python, jalankan query SQL berikut:
Kueri sekarang mengembalikan data sampel dalam urutan linguistik Turki:
| Insinyur data |
Sumber daya terkait
Klausul ORDER BY (dokumentasi Amazon Redshift)
Membuat UDF Python skalar (dokumentasi Amazon Redshift)
Informasi tambahan
Contoh bahasa Turki
Amazon Redshift mengembalikan hasil kueri berdasarkan urutan pengurutan UTF-8 biner, bukan urutan pengurutan khusus bahasa. Ini berarti bahwa jika Anda menanyakan tabel Amazon Redshift yang berisi karakter Turki, maka hasil kueri tidak diurutkan menurut urutan linguistik bahasa Turki. Bahasa Turki berisi enam karakter khusus (ç, ı, ğ, ö, ş, dan ü) yang tidak muncul dalam alfabet Latin. Karakter khusus ini ditempatkan di akhir set hasil yang diurutkan berdasarkan urutan UTF-8 biner, seperti yang ditunjukkan tabel berikut.
Pemesanan biner UTF-8 | Urutan linguistik Turki |
|---|---|
a | a |
b | b |
c | c |
d | ç (*) |
e | d |
f | e |
g | f |
-h | g |
saya | ğ (*) |
j | -h |
k | ı (*) |
l | saya |
m | j |
n | k |
o | l |
p | m |
r | n |
detik | o |
t | ö (*) |
u | p |
v | r |
y | detik |
z | ş (*) |
ç (*) | t |
ğ (*) | u |
ı (*) | ü (*) |
ö (*) | v |
ş (*) | y |
ü (*) | z |
catatan
Tanda bintang (*) menunjukkan karakter khusus dalam bahasa Turki.
Seperti yang diilustrasikan tabel di atas, karakter khusus ç adalah antara c dan d dalam urutan linguistik Turki, tetapi muncul setelah z dalam urutan UTF-8 biner. UDF Python skalar dalam pola ini menggunakan kamus pengganti karakter berikut untuk menggantikan karakter khusus Turki dengan karakter setara Latin yang sesuai.
Karakter khusus Turki | Karakter yang setara dengan Latin |
|---|---|
ç | c ~ |
ı | h ~ |
ğ | g ~ |
ö | o ~ |
ş | s ~ |
ü | u ~ |
catatan
Karakter tilde (~) ditambahkan ke akhir karakter Latin yang menggantikan karakter khusus Turki yang sesuai.
Memodifikasi fungsi UDF Python skalar
Untuk memodifikasi fungsi UDF Python skalar dari pola ini sehingga fungsi menerima parameter locate dan mendukung kamus transaksi ganda, gunakan kode SQL berikut:
CREATE OR REPLACE FUNCTION collate_sort (value varchar, locale varchar) RETURNS varchar IMMUTABLE AS $$ def sort_str(val): import string # Turkish Dictionary if locale == 'tr-TR': dictionary = { 'I': 'ı', 'ı': 'h~', 'İ': 'i', 'Ş': 's~', 'ş': 's~', 'Ğ': 'g~', 'ğ': 'g~', 'Ü': 'u~', 'ü': 'u~', 'Ö': 'o~', 'ö': 'o~', 'Ç': 'c~', 'ç': 'c~' } # German Dictionary if locale == 'de-DE': dictionary = { .... .... } for key, value in dictionary.items(): val = val.replace(key, value) return val.lower() return sort_str(value) $$ LANGUAGE plpythonu;
Kode contoh berikut menunjukkan bagaimana untuk query UDF Python dimodifikasi:
SELECT first_name FROM my_table ORDER BY collate_order(first_name, 'tr-TR');