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 dotyczące odczytywania 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 varchar kolumn z sortowaniami innych niż UTF8. Jest to znany problem w programach SQL Server i Azure SQL. Sortowanie inne niż UTF8 jest domyślne w usłudze Synapse SQL, więc zapytania klientów zostaną tym dotknięte. Klienci, którzy używają standardowych znaków w języku angielskim i niektórych podzestawu rozszerzonych znaków łacińskich, mogą nie zauważyć błędów konwersji. Niepoprawna konwersja jest wyjaśniona bardziej szczegółowo w . Zawsze używaj sortowania UTF-8 do odczytywania tekstu UTF-8 w bezserwerowej puli SQL.

Rozwiązanie

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 można jawnie zdefiniować w kolumnie varchar 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 odczytujących dane UTF8, należy ponownie utworzyć dotknięte tabele zewnętrzne i ustawić sortowanie UTF8 dla kolumn typu varchar (operacja metadanych).