Udostępnij za pośrednictwem


Format JSON w usługach Azure Data Factory i Azure Synapse Analytics

DOTYCZY: Azure Data Factory Azure Synapse Analytics

Napiwek

Wypróbuj usługę Data Factory w usłudze Microsoft Fabric — rozwiązanie analityczne typu all-in-one dla przedsiębiorstw. Usługa Microsoft Fabric obejmuje wszystko, od przenoszenia danych do nauki o danych, analizy w czasie rzeczywistym, analizy biznesowej i raportowania. Dowiedz się, jak bezpłatnie rozpocząć nową wersję próbną !

Postępuj zgodnie z tym artykułem, gdy chcesz przeanalizować pliki JSON lub zapisać dane w formacie JSON.

Format JSON jest obsługiwany dla następujących łączników:

Właściwości zestawu danych

Aby uzyskać pełną listę sekcji i właściwości dostępnych do definiowania zestawów danych, zobacz artykuł Zestawy danych. Ta sekcja zawiera listę właściwości obsługiwanych przez zestaw danych JSON.

Właściwości Opis Wymagania
type Właściwość type zestawu danych musi być ustawiona na wartość Json. Tak
lokalizacja Ustawienia lokalizacji plików. Każdy łącznik oparty na plikach ma własny typ lokalizacji i obsługiwane właściwości w obszarze location. Zobacz szczegóły w artykule dotyczącym łącznika —> sekcja Właściwości zestawu danych. Tak
encodingName Typ kodowania używany do odczytu/zapisu plików testowych.
Dozwolone wartości są następujące: "UTF-8","UTF-8 bez BOM", "UTF-16", "UTF-16BE", "UTF-32", "UTF-32BE", "US-ASCII", "UTF-7", "BIG5", "EUC-JP", "EUC-KR", "GB2312", "GB18030", "JOHAB", "SHIFT-JIS", "CP875", "CP866", "IBM00858", "IBM037", "IBM273", "IBM437", "IBM500", "IBM737", "IBM737", "IBM775", "IBM850", "IBM852", "IBM855", "IBM857", "IBM860", "IBM861", "IBM863", "IBM864", "IBM865", "IBM865", "IBM869", "IBM870", "IBM01140", "IBM01141", "IBM01142", "IBM01143", "IBM01144", "IBM01145", "IBM01146", "IBM01147", "IBM01148", "IBM01149", "ISO-2022-JP", "ISO-2022-KR", "ISO-8859-1", "ISO-8859-2", "ISO-8859-3", "ISO-8859-4", "ISO-8859-5", "ISO-8859-6", "ISO-8859-7", "ISO-8859-8", "ISO-8859-9", "ISO-8859-13", "ISO-8859-15", "WINDOWS-874", "WINDOWS-1250", "WINDOWS-1251", "WINDOWS-1255"2", "WINDOWS-1253", "WINDOWS-1254", "WINDOWS-1255", "WINDOWS-1256", "WINDOWS-1257", "WINDOWS-1258".
Nie.
kompresja Grupa właściwości do skonfigurowania kompresji pliku. Skonfiguruj tę sekcję, gdy chcesz wykonać kompresję/dekompresję podczas wykonywania działań. Nie.
type
(w obszarze compression)
Koder koder kompresji używany do odczytu/zapisu plików JSON.
Dozwolone wartości to bzip2, gzip, deflate, ZipDeflate, TarGzip, Tar, Snappy lub lz4. Wartość domyślna nie jest kompresowana.
Uwaga obecnie działanie Kopiuj nie obsługuje "snappy" i "lz4", a przepływ danych mapowania nie obsługuje "ZipDeflate", "TarGzip" i "Tar".
Uwaga podczas używania działania kopiowania do dekompresowania plików TarDeflate/TarGzip/ i zapisu w magazynie danych ujścia opartego na plikach pliki domyślnie pliki są wyodrębniane do folderu:<path specified in dataset>/<folder named as source compressed file>/ użyj/preserveCompressionFileNameAsFolder preserveZipFileNameAsFolderźródła działania kopiowania, aby kontrolować, czy zachować nazwę skompresowanych plików jako struktury folderów.
L.p.
poziom
(w obszarze compression)
Współczynnik kompresji.
Dozwolone wartości są optymalne lub najszybsze.
- Najszybsza: operacja kompresji powinna zostać ukończona tak szybko, jak to możliwe, nawet jeśli wynikowy plik nie jest optymalnie skompresowany.
- Optymalna: operacja kompresji powinna być optymalnie skompresowana, nawet jeśli operacja trwa dłużej. Aby uzyskać więcej informacji, zobacz Temat Poziom kompresji.
Nie.

Poniżej przedstawiono przykład zestawu danych JSON w usłudze Azure Blob Storage:

{
    "name": "JSONDataset",
    "properties": {
        "type": "Json",
        "linkedServiceName": {
            "referenceName": "<Azure Blob Storage linked service name>",
            "type": "LinkedServiceReference"
        },
        "schema": [ < physical schema, optional, retrievable during authoring > ],
        "typeProperties": {
            "location": {
                "type": "AzureBlobStorageLocation",
                "container": "containername",
                "folderPath": "folder/subfolder",
            },
            "compression": {
                "type": "gzip"
            }
        }
    }
}

Właściwości działania kopiowania

Aby uzyskać pełną listę sekcji i właściwości dostępnych do definiowania działań, zobacz artykuł Pipelines (Potoki ). Ta sekcja zawiera listę właściwości obsługiwanych przez źródło i ujście JSON.

Dowiedz się, jak wyodrębniać dane z plików JSON i mapować je na ujście magazynu danych/formatu lub odwrotnie z mapowania schematu.

Kod JSON jako źródło

Następujące właściwości są obsługiwane w sekcji działanie kopiowania *źródło* .

Właściwości Opis Wymagania
type Właściwość type źródła działania kopiowania musi być ustawiona na wartość JSONSource. Tak
formatUstawienia Grupa właściwości. Zapoznaj się z poniższą tabelą ustawień odczytu w formacie JSON. Nie.
storeSettings Grupa właściwości dotyczących odczytywania danych z magazynu danych. Każdy łącznik oparty na plikach ma własne obsługiwane ustawienia odczytu w obszarze storeSettings. Zobacz szczegóły w artykule dotyczącym łącznika —> sekcja właściwości działanie Kopiuj. Nie.

Obsługiwane ustawienia odczytu w formacie JSON w obszarze formatSettings:

Właściwości Opis Wymagania
type Typ formatUstawienia musi być ustawiony na wartość JsonReadSettings. Tak
compressionProperties Grupa właściwości dotyczących dekompresowania danych dla danego koder-dekodera kompresji. Nie.
preserveZipFileNameAsFolder
(pod compressionProperties->type jako ZipDeflateReadSettings)
Dotyczy konfiguracji wejściowego zestawu danych z kompresją ZipDeflate . Wskazuje, czy podczas kopiowania zachować nazwę źródłowego pliku zip jako strukturę folderów.
— W przypadku ustawienia wartości true (wartość domyślna) usługa zapisuje rozpakowane pliki na wartość <path specified in dataset>/<folder named as source zip file>/.
— Po ustawieniu wartości false usługa zapisuje rozpakowane pliki bezpośrednio do .<path specified in dataset> Upewnij się, że nie masz zduplikowanych nazw plików w różnych źródłowych plikach zip, aby uniknąć wyścigów ani nieoczekiwanych zachowań.
Nie.
preserveCompressionFileNameAsFolder
(w obszarze compressionProperties->type jako TarGZipReadSettings lub TarReadSettings)
Ma zastosowanie w przypadku skonfigurowania wejściowego zestawu danych z kompresją TarGzip/Tar. Wskazuje, czy podczas kopiowania zachować nazwę skompresowanego pliku źródłowego jako strukturę folderów.
— W przypadku ustawienia wartości true (wartość domyślna) usługa zapisuje dekompresowane pliki na wartość <path specified in dataset>/<folder named as source compressed file>/.
- W przypadku ustawienia wartości false usługa zapisuje dekompresowane pliki bezpośrednio do <path specified in dataset>. Upewnij się, że nie masz zduplikowanych nazw plików w różnych plikach źródłowych, aby uniknąć wyścigów ani nieoczekiwanych zachowań.
Nie.

Kod JSON jako ujście

Następujące właściwości są obsługiwane w sekcji działanie kopiowania *ujście*.

Właściwości Opis Wymagania
type Właściwość type źródła działania kopiowania musi być ustawiona na wartość JSONSink. Tak
formatUstawienia Grupa właściwości. Zapoznaj się z poniższą tabelą ustawień zapisu w formacie JSON. Nie.
storeSettings Grupa właściwości dotyczących sposobu zapisywania danych w magazynie danych. Każdy łącznik oparty na plikach ma własne obsługiwane ustawienia zapisu w obszarze storeSettings. Zobacz szczegóły w artykule dotyczącym łącznika —> sekcja właściwości działanie Kopiuj. Nie.

Obsługiwane ustawienia zapisu w formacie JSON w obszarze formatSettings:

Właściwości Opis Wymagania
type Typ formatUstawienia musi być ustawiony na wartość JsonWriteSettings. Tak
filePattern Wskazuje wzorzec danych przechowywanych w każdym pliku JSON. Dozwolone wartości to: setOfObjects (linie JSON) i arrayOfObjects. Wartością domyślną jest setOfObjects. Aby uzyskać szczegółowe informacje o tych wzorcach, zobacz sekcję Wzorce plików JSON. Nie.

Wzorce plików JSON

Podczas kopiowania danych z plików JSON działanie kopiowania może automatycznie wykrywać i analizować następujące wzorce plików JSON. Podczas zapisywania danych w plikach JSON można skonfigurować wzorzec pliku w ujściu działania kopiowania.

  • Typ I: setOfObjects

    Każdy plik zawiera pojedynczy obiekt, linie JSON lub obiekty łączone.

    • przykład kodu JSON z pojedynczym obiektem

      {
          "time": "2015-04-29T07:12:20.9100000Z",
          "callingimsi": "466920403025604",
          "callingnum1": "678948008",
          "callingnum2": "567834760",
          "switch1": "China",
          "switch2": "Germany"
      }
      
    • Linie JSON (ustawienie domyślne dla ujścia)

      {"time":"2015-04-29T07:12:20.9100000Z","callingimsi":"466920403025604","callingnum1":"678948008","callingnum2":"567834760","switch1":"China","switch2":"Germany"}
      {"time":"2015-04-29T07:13:21.0220000Z","callingimsi":"466922202613463","callingnum1":"123436380","callingnum2":"789037573","switch1":"US","switch2":"UK"}
      {"time":"2015-04-29T07:13:21.4370000Z","callingimsi":"466923101048691","callingnum1":"678901578","callingnum2":"345626404","switch1":"Germany","switch2":"UK"}
      
    • przykład kodu JSON z obiektami połączonymi

      {
          "time": "2015-04-29T07:12:20.9100000Z",
          "callingimsi": "466920403025604",
          "callingnum1": "678948008",
          "callingnum2": "567834760",
          "switch1": "China",
          "switch2": "Germany"
      }
      {
          "time": "2015-04-29T07:13:21.0220000Z",
          "callingimsi": "466922202613463",
          "callingnum1": "123436380",
          "callingnum2": "789037573",
          "switch1": "US",
          "switch2": "UK"
      }
      {
          "time": "2015-04-29T07:13:21.4370000Z",
          "callingimsi": "466923101048691",
          "callingnum1": "678901578",
          "callingnum2": "345626404",
          "switch1": "Germany",
          "switch2": "UK"
      }
      
  • Typ II: arrayOfObjects

    Każdy plik zawiera tablicę obiektów.

    [
        {
            "time": "2015-04-29T07:12:20.9100000Z",
            "callingimsi": "466920403025604",
            "callingnum1": "678948008",
            "callingnum2": "567834760",
            "switch1": "China",
            "switch2": "Germany"
        },
        {
            "time": "2015-04-29T07:13:21.0220000Z",
            "callingimsi": "466922202613463",
            "callingnum1": "123436380",
            "callingnum2": "789037573",
            "switch1": "US",
            "switch2": "UK"
        },
        {
            "time": "2015-04-29T07:13:21.4370000Z",
            "callingimsi": "466923101048691",
            "callingnum1": "678901578",
            "callingnum2": "345626404",
            "switch1": "Germany",
            "switch2": "UK"
        }
    ]
    

Właściwości przepływu mapowania danych

W przepływach mapowania danych można odczytywać i zapisywać dane w formacie JSON w następujących magazynach danych: Azure Blob Storage, Azure Data Lake Storage Gen1, Azure Data Lake Storage Gen2 i SFTP oraz odczytywać format JSON w usłudze Amazon S3.

Właściwości źródła

W poniższej tabeli wymieniono właściwości obsługiwane przez źródło json. Te właściwości można edytować na karcie Opcje źródła.

Nazwa/nazwisko opis Wymagania Dozwolone wartości Właściwość skryptu przepływu danych
Ścieżki z symbolami wieloznacznymi Wszystkie pliki pasujące do ścieżki wieloznacznej zostaną przetworzone. Zastępuje folder i ścieżkę pliku ustawioną w zestawie danych. nie Ciąg[] symbole wieloznacznePaths
Ścieżka główna partycji W przypadku danych plików podzielonych na partycje można wprowadzić ścieżkę katalogu głównego partycji, aby odczytywać foldery podzielone na partycje jako kolumny nie String partitionRootPath
Lista plików Czy źródło wskazuje plik tekstowy, który wyświetla listę plików do przetworzenia nie true lub false fileList
Kolumna do przechowywania nazwy pliku Utwórz nową kolumnę z nazwą pliku źródłowego i ścieżką nie String rowUrlColumn
Po zakończeniu Usuń lub przenieś pliki po przetworzeniu. Ścieżka pliku rozpoczyna się od katalogu głównego kontenera nie Usuń: true lub false
Ruszać: ['<from>', '<to>']
przeczyszczanie plików
moveFiles
Filtruj według ostatniej modyfikacji Wybierz filtrowanie plików w oparciu o czas ich ostatniej zmiany nie Sygnatura czasowa modifiedAfter
modifiedBefore
Pojedynczy dokument Przepływy mapowania danych odczytują jeden dokument JSON z każdego pliku nie true lub false singleDocument
Nazwy kolumn bez cudzysłów Jeśli wybrano nazwy kolumn bez cudzysłowów, przepływy danych mapowania odczytują kolumny JSON, które nie są otoczone cudzysłowami. nie true lub false unquotedColumnNames
Zawiera komentarze Wybierz pozycję Ma komentarze , jeśli dane JSON mają komentarz w stylu C lub C++ nie true lub false asComments
Pojedyncze cytowane Odczytuje kolumny JSON, które nie są otoczone cudzysłowami nie true lub false singleQuoted
Ukośnik odwrotny został uniknięci Wybierz ukośnik odwrotny, jeśli ukośniki odwrotne są używane do ucieczki znaków w danych JSON nie true lub false ukośnik odwrotny
Zezwalaj na brak znalezionych plików Jeśli wartość true, błąd nie jest zgłaszany, jeśli nie znaleziono żadnych plików nie true lub false ignoreNoFilesFound

Wbudowany zestaw danych

Przepływy danych mapowania obsługują "wbudowane zestawy danych" jako opcję definiowania źródła i ujścia. Wbudowany zestaw danych JSON jest definiowany bezpośrednio wewnątrz przekształceń źródła i ujścia i nie jest udostępniany poza zdefiniowanym przepływem danych. Jest to przydatne w przypadku parametryzacji właściwości zestawu danych bezpośrednio wewnątrz przepływu danych i może korzystać z lepszej wydajności w przypadku udostępnionych zestawów danych usługi ADF.

Podczas odczytywania dużej liczby folderów źródłowych i plików można zwiększyć wydajność odnajdywania plików przepływu danych, ustawiając opcję "Projektowany schemat użytkownika" wewnątrz projekcji | Okno dialogowe Opcje schematu. Ta opcja powoduje wyłączenie domyślnego automatycznego odnajdywania schematu usługi ADF i znacznie poprawi wydajność odnajdywania plików. Przed ustawieniem tej opcji pamiętaj, aby zaimportować projekcję JSON, aby usługa ADF ma istniejący schemat do projekcji. Ta opcja nie działa z dryfem schematu.

Opcje formatu źródłowego

Użycie zestawu danych JSON jako źródła w przepływie danych umożliwia ustawienie pięciu dodatkowych ustawień. Te ustawienia można znaleźć w obszarze akordeonu ustawień JSON na karcie Opcje źródła. W przypadku ustawienia Formularz dokumentu można wybrać jeden z typów dokumentów Pojedynczy dokument, Dokument na wiersz i Tablica dokumentów .

Ustawienia JSON

Wartość domyślna

Domyślnie dane JSON są odczytywane w następującym formacie.

{ "json": "record 1" }
{ "json": "record 2" }
{ "json": "record 3" }

Pojedynczy dokument

Jeśli wybrano pojedynczy dokument , przepływy mapowania danych odczytują jeden dokument JSON z każdego pliku.

File1.json
{
    "json": "record 1"
}
File2.json
{
    "json": "record 2"
}
File3.json
{
    "json": "record 3"
}

Jeśli wybrano opcję Dokument na wiersz , mapowanie przepływów danych odczytuje jeden dokument JSON z każdego wiersza w pliku.

File1.json
{"json": "record 1"}

File2.json
 {"time":"2015-04-29T07:12:20.9100000Z","callingimsi":"466920403025604","callingnum1":"678948008","callingnum2":"567834760","switch1":"China","switch2":"Germany"}
 {"time":"2015-04-29T07:13:21.0220000Z","callingimsi":"466922202613463","callingnum1":"123436380","callingnum2":"789037573","switch1":"US","switch2":"UK"}

File3.json
 {"time":"2015-04-29T07:12:20.9100000Z","callingimsi":"466920403025604","callingnum1":"678948008","callingnum2":"567834760","switch1":"China","switch2":"Germany"}
 {"time":"2015-04-29T07:13:21.0220000Z","callingimsi":"466922202613463","callingnum1":"123436380","callingnum2":"789037573","switch1":"US","switch2":"UK"}
 {"time":"2015-04-29T07:13:21.4370000Z","callingimsi":"466923101048691","callingnum1":"678901578","callingnum2":"345626404","switch1":"Germany","switch2":"UK"}

Jeśli wybrano tablicę dokumentów , przepływy mapowania danych odczytują jedną tablicę dokumentów z pliku.

File.json
[
        {
            "time": "2015-04-29T07:12:20.9100000Z",
            "callingimsi": "466920403025604",
            "callingnum1": "678948008",
            "callingnum2": "567834760",
            "switch1": "China",
            "switch2": "Germany"
        },
        {
            "time": "2015-04-29T07:13:21.0220000Z",
            "callingimsi": "466922202613463",
            "callingnum1": "123436380",
            "callingnum2": "789037573",
            "switch1": "US",
            "switch2": "UK"
        },
        {
            "time": "2015-04-29T07:13:21.4370000Z",
            "callingimsi": "466923101048691",
            "callingnum1": "678901578",
            "callingnum2": "345626404",
            "switch1": "Germany",
            "switch2": "UK"
        }
    ]

Uwaga

Jeśli przepływy danych zgłaszają błąd "corrupt_record" podczas wyświetlania podglądu danych JSON, prawdopodobnie dane zawierają pojedynczy dokument w pliku JSON. Ustawienie "pojedynczy dokument" powinno wyczyścić ten błąd.

Nazwy kolumn bez cudzysłów

Jeśli wybrano nazwy kolumn bez cudzysłowów, przepływy danych mapowania odczytują kolumny JSON, które nie są otoczone cudzysłowami.

{ json: "record 1" }
{ json: "record 2" }
{ json: "record 3" }

Zawiera komentarze

Wybierz pozycję Ma komentarze , jeśli dane JSON mają komentarz w stylu C lub C++.

{ "json": /** comment **/ "record 1" }
{ "json": "record 2" }
{ /** comment **/ "json": "record 3" }

Pojedyncze cytowane

Wybierz pozycję Pojedynczy cudzysłów , jeśli pola i wartości JSON używają cudzysłowów pojedynczych zamiast cudzysłowów podwójnych.

{ 'json': 'record 1' }
{ 'json': 'record 2' }
{ 'json': 'record 3' }

Ukośnik odwrotny został uniknięci

Wybierz pozycję Ukośnik odwrotny, jeśli ukośniki odwrotne są używane do ucieczki znaków w danych JSON.

{ "json": "record 1" }
{ "json": "\} \" \' \\ \n \\n record 2" }
{ "json": "record 3" }

Właściwości ujścia

W poniższej tabeli wymieniono właściwości obsługiwane przez ujście json. Te właściwości można edytować na karcie Ustawienia .

Nazwa/nazwisko opis Wymagania Dozwolone wartości Właściwość skryptu przepływu danych
Wyczyść folder Jeśli folder docelowy zostanie wyczyszczone przed zapisem nie true lub false truncate
Opcja Nazwa pliku Format nazewnictwa zapisanych danych. Domyślnie jeden plik na partycję w formacie part-#####-tid-<guid> nie Wzorzec: ciąg
Na partycję: Ciąg[]
Jako dane w kolumnie: Ciąg
Dane wyjściowe do pojedynczego pliku: ['<fileName>']
filePattern
partitionFileNames
rowUrlColumn
partitionFileNames

Tworzenie struktur JSON w kolumnie pochodnej

Do przepływu danych można dodać złożoną kolumnę za pomocą konstruktora wyrażeń kolumn pochodnych. W transformacji kolumny pochodnej dodaj nową kolumnę i otwórz konstruktora wyrażeń, klikając niebieskie pole. Aby utworzyć złożone kolumny, możesz ręcznie wprowadzić strukturę JSON lub użyć środowiska użytkownika, aby interaktywnie dodać podkolumny.

Korzystanie z środowiska użytkownika konstruktora wyrażeń

W okienku po stronie schematu wyjściowego umieść kursor nad kolumną i kliknij ikonę znaku plus. Wybierz pozycję Dodaj kolumnę podrzędną, aby utworzyć kolumnę typu złożonego.

Dodawanie podkolumny

Możesz dodać dodatkowe kolumny i podkolumny w taki sam sposób. Dla każdego niezwiązanego pola wyrażenie można dodać w edytorze wyrażeń po prawej stronie.

Dodawanie kolumny złożonej

Ręczne wprowadzanie struktury JSON

Aby ręcznie dodać strukturę JSON, dodaj nową kolumnę i wprowadź wyrażenie w edytorze. Wyrażenie ma następujący format ogólny:

@(
    field1=0,
    field2=@(
        field1=0
    )
)

Jeśli to wyrażenie zostało wprowadzone dla kolumny o nazwie "complexColumn", zostanie ono zapisane w ujściu jako następujący kod JSON:

{
    "complexColumn": {
        "field1": 0,
        "field2": {
            "field1": 0
        }
    }
}

Przykładowy skrypt ręczny dla pełnej definicji hierarchicznej

@(
    title=Title,
    firstName=FirstName,
    middleName=MiddleName,
    lastName=LastName,
    suffix=Suffix,
    contactDetails=@(
        email=EmailAddress,
        phone=Phone
    ),
    address=@(
        line1=AddressLine1,
        line2=AddressLine2,
        city=City,
        state=StateProvince,
        country=CountryRegion,
        postCode=PostalCode
    ),
    ids=[
        toString(CustomerID), toString(AddressID), rowguid
    ]
)

Poniżej przedstawiono niektóre typowe łączniki i formaty związane z formatem JSON: