Udostępnij za pośrednictwem


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).

Następne kroki