こちらの機能を試してみます。
ギリシャ語と英語を含むテーブルを作ります。
CREATE TABLE users.takaaki_yayoi.HeroNames (
GreekName STRING COLLATE EL_AI,
EnglishName STRING COLLATE UTF8_LCASE
);
INSERT INTO users.takaaki_yayoi.HeroNames (GreekName, EnglishName)
VALUES
('Ἀχιλλεύς', 'Achilles'),
('Ἀγαμέμνων', 'Agamemnon'),
('Ὀδυσσεύς', 'Odysseus'),
('Διομήδης', 'Diomedes'),
('Αἴας ὁ Μέγας', 'Ajax the Greater'),
('Αἴας ὁ Λοκρός', 'Ajax the Lesser'),
('Μενέλαος', 'Menelaus'),
('Νέστωρ', 'Nestor'),
('Πάτροκλος', 'Patroclus'),
('Ἰδομενεύς', 'Idomeneus'),
('Ἕκτωρ', 'Hector'),
('Αἰνείας', 'Aeneas'),
('Πάρις', 'Paris'),
('Σαρπηδών', 'Sarpedon'),
('Γλαῦκος', 'Glaucus'),
('Πολυδάμας', 'Polydamas'),
('Πάνδαρος', 'Pandarus'),
('Δηίφοβος', 'Deiphobus'),
('Ἀντήνωρ', 'Antenor'),
('Αἰσύητης', 'Aesyetes');
カタログエクスプローラではタイプでコレーションを確認できます。サンプルデータを表示する際には、Databricksランタイム16.1以降のクラスターを使うようにしてください。SQLウェアハウスではまだコレーションがサポートされていないので、SQLウェアハウスでコレーションが指定されているテーブルを表示しようとすると、未サポートのエラーになります。
サポートされているコレーションを確認します。
SELECT * FROM collations()
日本語もサポートされています。あとで試します。
統計情報を更新します。
ANALYZE TABLE users.takaaki_yayoi.HeroNames COMPUTE STATISTICS FOR COLUMNS GreekName, EnglishName;
大文字小文字を区別しない(CASE_INSENSITIVE
)検索を行います。
SELECT * FROM users.takaaki_yayoi.HeroNames WHERE EnglishName = 'achilles';
大文字のAchillesがヒットしました。もうlower
は不要なんですね。
ギリシャ語でソートします。
SELECT * FROM users.takaaki_yayoi.HeroNames ORDER BY GreekName;
英語のアルファベット順ではないことはわかります(ギリシャ語わかりません)。
アクセント文字の区別をしないACCENT_INSENSITIVE
な検索を行います。
SELECT * FROM users.takaaki_yayoi.HeroNames WHERE GreekName = 'Αγαμεμνων';
小さいですがアクセント文字があるἈγαμέμνων
がヒットしていることがわかります。
日本語でも挙動を見てみます。こちらを参考にさせていただきました。日本語における濁点、半濁点はアクセント文字とのことです。
文字列上、は
とぱ
は違うので以下はfalse
になります。
SELECT 'は' = 'ば' AS comparison_result;
アクセント文字を区別しないで照合します。
SELECT 'は' = 'ば' COLLATE ja_AI AS comparison_result;
同じと見なされました。
大文字小文字も見てみます。以下はfalse
になります。
SELECT 'あ' = 'ぁ' AS comparison_result;
大文字小文字を区別せず(CASE_INSENSITIVE)に照合させます。
SELECT 'あ' = 'ぁ' COLLATE ja_CI AS comparison_result;
同じと見なされました。
まもなく、SQLウェアハウスでもコレーションが使えるようになるとのことです。たげんごをしょりするじょうきょうにおいてm文字列操作の幅が広がる機能ですので是非ご活用ください!