Felsöka läsning av UTF-8-text från CSV- eller Parquet-filer med hjälp av serverlös SQL-pool i Azure Synapse Analytics

Den här artikeln innehåller felsökningssteg för att läsa UTF-8-text från CSV- eller Parquet-filer med hjälp av serverlös SQL-pool i Azure Synapse Analytics.

När UTF-8-text läss från en CSV- eller PARQUET-fil med hjälp av serverlös SQL-pool konverteras vissa specialtecken som ü och ö felaktigt om frågan returnerar VARCHAR-kolumner med icke-UTF8-sortering. Det här är ett känt problem i SQL Server och Azure SQL. Icke-UTF8-sortering är standard i Synapse SQL så kundfrågor påverkas. Kunder som använder engelska standardtecken och vissa delmängder av utökade latinska tecken kanske inte märker konverteringsfelen. Den felaktiga konverteringen förklaras mer detaljerat i Använd alltid UTF-8-sortering för att läsa UTF-8-text i serverlös SQL-pool

Lösning

Lösningen på det här problemet är att alltid använda UTF-8-sortering vid läsning av UTF-8-text från CSV- eller PARQUET-filer.

  • I många fall behöver du bara ange UTF8-sortering för databasen (metadataåtgärd).

    alter database MyDB
           COLLATE Latin1_General_100_BIN2_UTF8;
    
  • Du kan uttryckligen definiera sortering på VARCHAR-kolumnen i OPENROWSET eller extern tabell:

    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
    
  • Om du inte angav UTF8-sortering för externa tabeller som läser UTF8-data måste du återskapa påverkade externa tabeller och ange UTF8-sortering för VARCHAR-kolumner (metadataåtgärd).

Nästa steg