Rozwiązywanie problemów z odczytywaniem tekstu UTF-8 z plików CSV lub Parquet przy użyciu bezserwerowej puli SQL w usłudze Azure Synapse Analytics
Ten artykuł zawiera kroki rozwiązywania problemów z odczytywaniem tekstu UTF-8 z plików CSV lub Parquet przy użyciu bezserwerowej puli SQL w usłudze Azure Synapse Analytics.
Gdy tekst UTF-8 jest odczytywany z pliku CSV lub PARQUET przy użyciu bezserwerowej puli SQL, niektóre znaki specjalne, takie jak ü i ö, są niepoprawnie konwertowane, jeśli zapytanie zwraca kolumny VARCHAR z sortowaniami innych niż UTF8. Jest to znany problem w SQL Server i Azure SQL. Sortowanie inne niż UTF8 jest wartością domyślną w usłudze Synapse SQL, więc zapytania klientów będą miały wpływ. Klienci, którzy używają standardowych znaków angielskich i niektórych podzbiorów rozszerzonych znaków łacińskich, mogą nie zauważyć błędów konwersji. Nieprawidłowa konwersja jest objaśniona bardziej szczegółowo w artykule Always use UTF-8 collations to read UTF-8 text in serverless SQL pool (Zawsze używaj sortowania UTF-8 do odczytywania tekstu UTF-8 w bezserwerowej puli SQL)
Obejście
Obejściem tego problemu jest zawsze użycie sortowania UTF-8 podczas odczytywania tekstu UTF-8 z plików CSV lub PARQUET.
W wielu przypadkach wystarczy ustawić sortowanie UTF8 w bazie danych (operacja metadanych).
alter database MyDB COLLATE Latin1_General_100_BIN2_UTF8;
Sortowanie w kolumnie VARCHAR można jawnie zdefiniować w tabeli OPENROWSET lub tabeli zewnętrznej:
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
Jeśli nie określono sortowania UTF8 w tabelach zewnętrznych, które odczytują dane UTF8, musisz ponownie utworzyć tabele zewnętrzne, których dotyczy problem, i ustawić sortowanie UTF8 w kolumnach VARCHAR (operacja metadanych).