Przekształcanie danych przy użyciu działania pig w Azure Data Factory

Uwaga

Ten artykuł dotyczy wersji 1 usługi Data Factory. Jeśli używasz bieżącej wersji usługi Data Factory, zobacz przekształcanie danych przy użyciu działania Pig w usłudze Data Factory.

Działanie usługi HDInsight Pig w potoku usługi Data Factory wykonuje zapytania pig na własnym lub na żądanie klastra usługi HDInsight opartego na systemie Windows/Linux. Ten artykuł opiera się na artykule dotyczącym działań przekształcania danych , który przedstawia ogólne omówienie transformacji danych i obsługiwanych działań przekształcania.

Uwaga

Jeśli dopiero zaczynasz Azure Data Factory, zapoznaj się z artykułem Wprowadzenie do Azure Data Factory i wykonaj samouczek: Tworzenie pierwszego potoku danych przed przeczytaniem tego artykułu.

Składnia

{
  "name": "HiveActivitySamplePipeline",
  "properties": {
    "activities": [
      {
        "name": "Pig Activity",
        "description": "description",
        "type": "HDInsightPig",
        "inputs": [
          {
            "name": "input tables"
          }
        ],
        "outputs": [
          {
            "name": "output tables"
          }
        ],
        "linkedServiceName": "MyHDInsightLinkedService",
        "typeProperties": {
          "script": "Pig script",
          "scriptPath": "<pathtothePigscriptfileinAzureblobstorage>",
          "defines": {
            "param1": "param1Value"
          }
        },
        "scheduler": {
          "frequency": "Day",
          "interval": 1
        }
      }
    ]
  }
}

Szczegóły składni

Właściwość Opis Wymagane
name Nazwa działania Tak
description (opis) Tekst opisujący, do czego służy działanie Nie
typ HDinsightPig Tak
Wejścia Co najmniej jeden wkład używany przez działanie Pig Nie
Wyjść Co najmniej jeden wynik wygenerowany przez działanie pig Tak
linkedServiceName Odwołanie do klastra usługi HDInsight zarejestrowanego jako połączona usługa w usłudze Data Factory Tak
skrypt Określanie wbudowanego skryptu pig Nie
scriptPath Zapisz skrypt pig w magazynie obiektów blob platformy Azure i podaj ścieżkę do pliku. Użyj właściwości "script" lub "scriptPath". Oba nie mogą być używane razem. Nazwa pliku jest uwzględniana w wielkości liter. Nie
Definiuje Określ parametry jako pary klucz/wartość do odwoływania się do skryptu pig Nie

Przykład

Rozważmy przykład analizy dzienników gier, w której chcesz zidentyfikować czas spędzony przez graczy grających w gry uruchomione przez firmę.

Poniższy przykładowy dziennik gier to plik rozdzielony przecinkami (,). Zawiera następujące pola: ProfileID, SessionStart, Duration, SrcIPAddress i GameType.

1809,2014-05-04 12:04:25.3470000,14,221.117.223.75,CaptureFlag
1703,2014-05-04 06:05:06.0090000,16,12.49.178.247,KingHill
1703,2014-05-04 10:21:57.3290000,10,199.118.18.179,CaptureFlag
1809,2014-05-04 05:24:22.2100000,23,192.84.66.141,KingHill
.....

Skrypt pig do przetwarzania tych danych:

PigSampleIn = LOAD 'wasb://adfwalkthrough@anandsub14.blob.core.windows.net/samplein/' USING PigStorage(',') AS (ProfileID:chararray, SessionStart:chararray, Duration:int, SrcIPAddress:chararray, GameType:chararray);

GroupProfile = Group PigSampleIn all;

PigSampleOut = Foreach GroupProfile Generate PigSampleIn.ProfileID, SUM(PigSampleIn.Duration);

Store PigSampleOut into 'wasb://adfwalkthrough@anandsub14.blob.core.windows.net/sampleoutpig/' USING PigStorage (',');

Aby wykonać ten skrypt pig w potoku usługi Data Factory, wykonaj następujące czynności:

  1. Utwórz połączoną usługę, aby zarejestrować własny klaster obliczeniowy usługi HDInsight lub skonfigurować klaster obliczeniowy usługi HDInsight na żądanie. Wywołajmy tę połączoną usługę HDInsightLinkedService.

  2. Utwórz połączoną usługę w celu skonfigurowania połączenia z usługą Azure Blob Storage hostujących dane. Wywołajmy tę połączoną usługę StorageLinkedService.

  3. Utwórz zestawy danych wskazujące dane wejściowe i wyjściowe. Wywołajmy wejściowy zestaw danych PigSampleIn i wyjściowy zestaw danych PigSampleOut.

  4. Skopiuj zapytanie Pig w pliku Azure Blob Storage skonfigurowane w kroku 2. Jeśli magazyn platformy Azure hostujący dane różni się od tego, który hostuje plik zapytania, utwórz oddzielną połączoną usługę Azure Storage. Zapoznaj się z połączoną usługą w konfiguracji działania. Użyj scriptPath , aby określić ścieżkę do pliku skryptu pig i scriptLinkedService.

    Uwaga

    Skrypt pig można również podać w tekście w definicji działania przy użyciu właściwości skryptu . Nie zalecamy jednak tego podejścia, ponieważ wszystkie znaki specjalne w skrytecie muszą zostać uniknięte i mogą powodować problemy z debugowaniem. Najlepszym rozwiązaniem jest wykonanie kroku 4.

  5. Utwórz potok za pomocą działania HDInsightPig. To działanie przetwarza dane wejściowe, uruchamiając skrypt pig w klastrze usługi HDInsight.

    {
      "name": "PigActivitySamplePipeline",
      "properties": {
        "activities": [
          {
            "name": "PigActivitySample",
            "type": "HDInsightPig",
            "inputs": [
              {
                "name": "PigSampleIn"
              }
            ],
            "outputs": [
              {
                "name": "PigSampleOut"
              }
            ],
            "linkedServiceName": "HDInsightLinkedService",
            "typeproperties": {
              "scriptPath": "adfwalkthrough\\scripts\\enrichlogs.pig",
              "scriptLinkedService": "StorageLinkedService"
            },
            "scheduler": {
              "frequency": "Day",
              "interval": 1
            }
          }
        ]
      }
    }
    
  6. Wdróż potok. Aby uzyskać szczegółowe informacje, zobacz artykuł Tworzenie potoków .

  7. Monitorowanie potoku przy użyciu widoków monitorowania i zarządzania fabryki danych. Aby uzyskać szczegółowe informacje, zobacz artykuł Monitorowanie potoków usługi Data Factory i zarządzanie nimi .

Określanie parametrów skryptu pig

Rozważmy następujący przykład: dzienniki gier są pozyskiwane codziennie do Azure Blob Storage i przechowywane w folderze podzielonym na partycje na podstawie daty i godziny. Chcesz sparametryzować skrypt pig i dynamicznie przekazać lokalizację folderu wejściowego w czasie wykonywania, a także utworzyć dane wyjściowe podzielone na partycje z datą i godziną.

Aby użyć sparametryzowanego skryptu pig, wykonaj następujące czynności:

  • Zdefiniuj parametry w definicji.

    {
      "name": "PigActivitySamplePipeline",
      "properties": {
        "activities": [
          {
            "name": "PigActivitySample",
            "type": "HDInsightPig",
            "inputs": [
              {
                "name": "PigSampleIn"
              }
            ],
            "outputs": [
              {
                "name": "PigSampleOut"
              }
            ],
            "linkedServiceName": "HDInsightLinkedService",
            "typeproperties": {
              "scriptPath": "adfwalkthrough\\scripts\\samplepig.hql",
              "scriptLinkedService": "StorageLinkedService",
              "defines": {
                "Input": "$$Text.Format('wasb: //adfwalkthrough@<storageaccountname>.blob.core.windows.net/samplein/yearno={0: yyyy}/monthno={0:MM}/dayno={0: dd}/',SliceStart)",
                "Output": "$$Text.Format('wasb://adfwalkthrough@<storageaccountname>.blob.core.windows.net/sampleout/yearno={0:yyyy}/monthno={0:MM}/dayno={0:dd}/', SliceStart)"
              }
            },
            "scheduler": {
              "frequency": "Day",
              "interval": 1
            }
          }
        ]
      }
    }
    
  • W skrycie pig odwołuje się do parametrów przy użyciu polecenia "$parameterName", jak pokazano w poniższym przykładzie:

    PigSampleIn = LOAD '$Input' USING PigStorage(',') AS (ProfileID:chararray, SessionStart:chararray, Duration:int, SrcIPAddress:chararray, GameType:chararray);
    GroupProfile = Group PigSampleIn all;
    PigSampleOut = Foreach GroupProfile Generate PigSampleIn.ProfileID, SUM(PigSampleIn.Duration);
    Store PigSampleOut into '$Output' USING PigStorage (','); 
    

Zobacz też