Problembehandlung beim Lesen von UTF-8-Text aus CSV- oder Parquet-Dateien mithilfe eines serverlosen SQL-Pools in Azure Synapse Analytics
In diesem Artikel werden Schritte zur Problembehandlung beim Lesen von UTF-8-Text aus CSV- oder Parquet-Dateien mithilfe eines serverlosen SQL-Pools in Azure Synapse Analytics beschrieben.
Wenn UTF-8-Text mithilfe eines serverlosen SQL-Pools aus einer CSV- oder Parquet-Datei gelesen wird, werden einige Sonderzeichen wie „ü“ und „ö“ fälschlicherweise konvertiert, wenn die Abfrage VARCHAR-Spalten mit Nicht-UTF8-Sortierungen zurückgibt. Dies ist ein bekanntes Problem in SQL Server und Azure SQL. Die Nicht-UTF8-Sortierung ist die Standardeinstellung in Synapse SQL, sodass Kundenabfragen beeinträchtigt werden. Kunden, die englische Standardzeichen und eine Teilmenge von erweiterten lateinischen Zeichen verwenden, bemerken die Konvertierungsfehler möglicherweise nicht. Die falsche Konvertierung wird in Always use UTF-8 collations to read UTF-8 text in serverless SQL pool (Immer UTF-8-Sortierungen zum Lesen von UTF-8-Text im serverlosen SQL-Pool verwenden) ausführlich erläutert.
Problemumgehung
Die Umgehung für dieses Problem besteht darin, beim Lesen von UTF-8-Text aus CSV- oder Parquet-Dateien immer UTF-8-Sortierung zu verwenden.
In vielen Fällen müssen Sie nur UTF8-Sortierung für die Datenbank festlegen (Metadatenvorgang).
alter database MyDB COLLATE Latin1_General_100_BIN2_UTF8;
Sie können die Sortierung der VARCHAR-Spalte explizit in OPENROWSET oder einer externen Tabelle definieren:
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
Wenn Sie keine UTF8-Sortierung für externe Tabellen angegeben haben, die UTF8-Daten lesen, müssen Sie betroffene externe Tabellen neu erstellen und UTF8-Sortierung für VARCHAR-Spalten (Metadatenvorgang) festlegen.