この記事では、Azure Synapse Analytics のサーバーレス SQL プールを使用して CSV または Parquet ファイルから UTF-8 テキストを読み取るためのトラブルシューティング手順について説明します。
サーバーレス SQL プールを使用して CSV または PARQUET ファイルから UTF-8 テキストを読み取る場合、クエリが UTF8 以外の照合順序を持つ varchar 列を返す場合、ü
やö
などの一部の特殊文字が正しく変換されません。 これは、SQL Server と Azure SQL の既知の問題です。 SYNapse SQL では UTF8 以外の照合順序が既定値であるため、顧客のクエリが影響を受けます。 標準の英語文字と拡張ラテン文字の一部のサブセットを使用しているお客様は、変換エラーに気付かない場合があります。 不正な変換については、「 常に UTF-8 照合順序を使用してサーバーレス SQL プールで UTF-8 テキストを読み取る」で詳しく説明されています。
問題解決策
この問題の回避策は、CSV または PARQUET ファイルから UTF-8 テキストを読み取るときに、常に UTF-8 照合順序を使用することです。
多くの場合、データベースに UTF8 照合順序を設定するだけで済みます (メタデータ操作)。
alter database MyDB COLLATE Latin1_General_100_BIN2_UTF8;
OPENROWSET または外部テーブルの varchar 列で照合順序を明示的に定義できます。
select geo_id, cases = sum(cases) from openrowset( bulk 'latest/ecdc_cases.parquet', data_source = 'covid', format = 'parquet' ) with ( cases int, geo_id VARCHAR(6) COLLATE Latin1_General_100_BIN2_UTF8 ) as rows group by geo_id
UTF8 データを読み取る外部テーブルで UTF8 照合順序を指定しなかった場合は、影響を受ける外部テーブルを再作成し、 varchar 列に UTF8 照合順序を設定する必要があります (メタデータ操作)。