Azure Data Factory 및 Azure Synapse Analytics의 조회 작업

적용 대상: Azure Data Factory Azure Synapse Analytics

기업용 올인원 분석 솔루션인 Microsoft Fabric의 Data Factory를 사용해 보세요. Microsoft Fabric은 데이터 이동부터 데이터 과학, 실시간 분석, 비즈니스 인텔리전스 및 보고에 이르기까지 모든 것을 다룹니다. 무료로 새 평가판을 시작하는 방법을 알아봅니다!

조회 작업은 데이터 팩터리 및 Synapse 파이프라인에서 지원하는 데이터 원본에서 데이터 세트를 검색할 수 있습니다. 개체 이름을 하드 코딩하는 대신, 후속 작업에서 작동할 개체를 동적으로 결정하는 데 사용할 수 있습니다. 개체의 예로는 파일과 테이블이 있습니다.

조회 작업은 구성 파일 또는 테이블의 내용을 읽고 반환합니다. 쿼리 또는 저장 프로시저를 실행한 결과도 반환합니다. 출력은 싱글톤 값 또는 특성의 배열일 수 있으며 해당 출력은 후속 복사, 변환 또는 ForEach 작업과 같은 제어 흐름 작업에서 사용될 수 있습니다.

UI를 사용하여 조회 작업 만들기

파이프라인에서 조회 작업을 사용하려면 다음 단계를 완료합니다.

  1. 파이프라인 작업 창에서 조회를 검색하고 조회 작업을 파이프라인 캔버스로 끕니다.

  2. 아직 선택하지 않은 경우 캔버스에서 새 조회 작업을 선택하고 해당 설정 탭을 선택하여 세부 정보를 편집합니다.

    Shows the UI for a Lookup activity.

  3. 기존 원본 데이터 세트를 선택하거나 새로 만들기 단추를 선택하여 새로 만듭니다.

  4. 원본 데이터 세트에서 포함할 행을 식별하는 옵션은 데이터 세트 형식에 따라 달라집니다. 위 예제에서는 구분된 텍스트 데이터 세트에 대한 구성 옵션을 보여 줍니다. 다음은 Azure SQL 테이블 데이터 세트 및 OData 데이터 세트에 대한 구성 옵션의 예입니다.

    Shows the configuration options in the Lookup activity for an Azure SQL table dataset.

    Shows the configuration options in the Lookup activity for an OData dataset.

지원되는 기능

다음을 참고하십시오.

  • 조회 작업은 최대 5,000개의 행을 반환할 수 있습니다. 결과 집합에 더 많은 레코드가 있으면 처음 5000행이 반환됩니다.
  • 조회 작업 출력은 최대 4MB의 크기를 지원하며 크기가 제한을 초과하면 작업은 실패합니다.
  • 시간 제한 전까지 가능한 최대 조회 작업 기간은 24시간입니다.

참고 항목

쿼리 또는 저장 프로시저를 사용하여 데이터를 조회하는 경우 정확히 하나의 결과 집합을 반환하는지 확인해야 합니다. 그렇지 않으면 조회 작업이 실패합니다.

다음은 조회 작업에 지원되는 데이터 원본입니다.

범주 데이터 저장소
Azure Azure Blob Storage
  Azure Cosmos DB for NoSQL
  Azure Data Explorer(Kusto)
  Azure Data Lake Storage Gen1
  Azure Data Lake Storage Gen2
  Azure Database for MariaDB
  Azure Database for MySQL
  Azure Database for PostgreSQL
  Azure Databricks Delta Lake
  Azure 파일
  Azure SQL Database
  Azure SQL Managed Instance
  Azure Synapse Analytics
  Azure Table Storage
Database Amazon RDS for Oracle
  Amazon RDS for SQL Server
  Amazon Redshift
  Apache Impala
  Azure SQL Managed Instance
  DB2
  Drill
  Google AdWords
  Google BigQuery
  Greenplum
  HBase
  Hive
  Informix
  MariaDB
  Microsoft Access
  MySQL
  Netezza
  Oracle
  Phoenix
  PostgreSQL
  Presto
  SAP Business Warehouse 개방형 허브
  MDX를 통한 SAP Business Warehouse
  SAP HANA
  SAP 테이블
  SQL Server
  Spark
  Sybase
  Teradata
  Vertica
NoSQL Cassandra
  Couchbase(미리 보기)
파일 Amazon S3
  Amazon S3 호환 스토리지
  파일 시스템
  FTP
  Google Cloud Storage
  HDFS
  일반 HTTP
  Microsoft Fabric Lakehouse
  Oracle Cloud Storage
  SFTP
일반 프로토콜 일반 OData
  일반 ODBC
  SharePoint Online 목록
서비스 및 앱 Amazon Marketplace Web Service
  Concur(미리 보기)
  Dataverse
  Dynamics 365
  Dynamics AX
  Dynamics CRM
  HubSpot
  Jira
  Azure Data Explorer(Kusto)
  Magento(미리 보기)
  Marketo(미리 보기)
  Oracle Eloqua(미리 보기)
  Oracle Responsys(미리 보기)
  Oracle Service Cloud(미리 보기)
  PayPal(미리 보기)
  QuickBooks(미리 보기)
  SAP Cloud for Customer(C4C)
  SAP ECC
  Salesforce
  Salesforce Marketing Cloud
  Salesforce 서비스 클라우드
  ServiceNow
  Shopify(미리 보기)
  Snowflake
  Square(미리 보기)
  웹 테이블(HTML 테이블)
  Xero
  Zoho(미리 보기)

참고 항목

미리 보기로 표시된 모든 커넥터는 사용자가 직접 사용해 보고 피드백을 제공할 수 있음을 의미합니다. 솔루션의 미리 보기 커넥터에 종속성을 적용하려면 Azure 지원에 문의하세요.

구문

{
    "name":"LookupActivity",
    "type":"Lookup",
    "typeProperties":{
        "source":{
            "type":"<source type>"
        },
        "dataset":{
            "referenceName":"<source dataset name>",
            "type":"DatasetReference"
        },
        "firstRowOnly":<true or false>
    }
}

형식 속성

이름 Description Type 필수 여부
데이터 세트 조회를 위한 데이터 세트 참조를 제공합니다. 자세한 내용은 해당하는 각 커넥터 문서의 데이터 세트 속성 섹션에서 확인하세요. 키/값 쌍
source 복사 작업 원본과 동일한 데이터 세트 관련 원본 속성을 포함하고 있습니다. 자세한 내용은 해당하는 각 커넥터 문서의 복사 작업 속성 섹션에서 확인하세요. 키/값 쌍
firstRowOnly 첫 번째 행만 반환할 것인지 아니면 모든 행을 반환할 것인지 여부를 나타냅니다. 부울 아니요. 기본값은 true입니다.

참고 항목

  • ByteArray 형식의 원본 열은 지원되지 않습니다.
  • 구조체는 데이터 세트 정의에서 지원되지 않습니다. 텍스트 서식 파일의 경우 헤더 행을 사용하여 열 이름을 입력합니다.
  • 조회 원본이 JSON 파일인 경우 JSON 개체의 모양을 변경하는 jsonPathDefinition 설정이 지원되지 않습니다. 전체 개체가 검색됩니다.

조회 작업 결과 사용

조회 결과는 작업 실행 결과의 output 섹션에 반환됩니다.

  • firstRowOnlytrue(기본값)로 설정되면 출력 형식은 다음 코드와 같습니다. 조회 결과는 고정된 firstRow 키 아래에 있습니다. 결과를 후속 작업에 사용하려면 @{activity('LookupActivity').output.firstRow.table} 패턴을 사용합니다.

    {
        "firstRow":
        {
            "Id": "1",
            "schema":"dbo",
            "table":"Table1"
        }
    }
    
  • firstRowOnlyfalse로 설정되면 출력 형식은 다음 코드와 같습니다. count 필드는 반환되는 레코드 수를 나타냅니다. 자세한 값은 고정 value 배열 아래에 표시됩니다. 이 경우 조회 작업 후에 Foreach 작업이 이어집니다. @activity('MyLookupActivity').output.value 패턴을 사용하여 value 배열을 ForEach 작업 items 필드에 전달합니다. value 배열의 요소에 액세스하려면 @{activity('lookupActivity').output.value[zero based index].propertyname} 구문을 따릅니다. 예제는 @{activity('lookupActivity').output.value[0].schema}입니다.

    {
        "count": "2",
        "value": [
            {
                "Id": "1",
                "schema":"dbo",
                "table":"Table1"
            },
            {
                "Id": "2",
                "schema":"dbo",
                "table":"Table2"
            }
        ]
    } 
    

예시

이 예제에서 파이프라인은 조회복사 작업을 포함하고 있습니다. 복사 작업은 Azure SQL Database 인스턴스의 SQL 테이블에서 Azure Blob 스토리지로 데이터를 복사합니다. SQL 테이블의 이름은 Blob Storage의 JSON 파일에 저장됩니다. 조회 작업은 런타임 시 테이블 이름을 조회합니다. JSON은 이 방법을 사용하여 동적으로 수정됩니다. 따라서 사용자가 파이프라인 또는 데이터 세트를 다시 배포할 필요가 없습니다.

이 예제는 첫 번째 행만 조회합니다. 모든 행을 조회하고 결과를 ForEach 작업과 연결하려면 여러 테이블 대량 복사의 샘플을 참조하세요.

파이프라인

  • 조회 작업은 Azure Blob Storage의 위치를 참조하는 LookupDataset를 사용하도록 구성됩니다. 조회 작업은 이 위치에 있는 JSON 파일에서 SQL 테이블의 이름을 읽습니다.
  • 복사 작업은 SQL 테이블의 이름인 조회 작업의 출력을 사용합니다. SourceDatasettableName 속성은 조회 작업의 출력을 사용하도록 구성됩니다. 복사 작업은 SQL 테이블의 데이터를 Azure Blob Storage의 위치로 복사합니다. 위치는 SinkDataset 속성을 통해 지정합니다.
{
    "name": "LookupPipelineDemo",
    "properties": {
        "activities": [
            {
                "name": "LookupActivity",
                "type": "Lookup",
                "dependsOn": [],
                "policy": {
                    "timeout": "7.00:00:00",
                    "retry": 0,
                    "retryIntervalInSeconds": 30,
                    "secureOutput": false,
                    "secureInput": false
                },
                "userProperties": [],
                "typeProperties": {
                    "source": {
                        "type": "JsonSource",
                        "storeSettings": {
                            "type": "AzureBlobStorageReadSettings",
                            "recursive": true
                        },
                        "formatSettings": {
                            "type": "JsonReadSettings"
                        }
                    },
                    "dataset": {
                        "referenceName": "LookupDataset",
                        "type": "DatasetReference"
                    },
                    "firstRowOnly": true
                }
            },
            {
                "name": "CopyActivity",
                "type": "Copy",
                "dependsOn": [
                    {
                        "activity": "LookupActivity",
                        "dependencyConditions": [
                            "Succeeded"
                        ]
                    }
                ],
                "policy": {
                    "timeout": "7.00:00:00",
                    "retry": 0,
                    "retryIntervalInSeconds": 30,
                    "secureOutput": false,
                    "secureInput": false
                },
                "userProperties": [],
                "typeProperties": {
                    "source": {
                        "type": "AzureSqlSource",
                        "sqlReaderQuery": {
                            "value": "select * from [@{activity('LookupActivity').output.firstRow.schema}].[@{activity('LookupActivity').output.firstRow.table}]",
                            "type": "Expression"
                        },
                        "queryTimeout": "02:00:00",
                        "partitionOption": "None"
                    },
                    "sink": {
                        "type": "DelimitedTextSink",
                        "storeSettings": {
                            "type": "AzureBlobStorageWriteSettings"
                        },
                        "formatSettings": {
                            "type": "DelimitedTextWriteSettings",
                            "quoteAllText": true,
                            "fileExtension": ".txt"
                        }
                    },
                    "enableStaging": false,
                    "translator": {
                        "type": "TabularTranslator",
                        "typeConversion": true,
                        "typeConversionSettings": {
                            "allowDataTruncation": true,
                            "treatBooleanAsNumber": false
                        }
                    }
                },
                "inputs": [
                    {
                        "referenceName": "SourceDataset",
                        "type": "DatasetReference",
                        "parameters": {
                            "schemaName": {
                                "value": "@activity('LookupActivity').output.firstRow.schema",
                                "type": "Expression"
                            },
                            "tableName": {
                                "value": "@activity('LookupActivity').output.firstRow.table",
                                "type": "Expression"
                            }
                        }
                    }
                ],
                "outputs": [
                    {
                        "referenceName": "SinkDataset",
                        "type": "DatasetReference",
                        "parameters": {
                            "schema": {
                                "value": "@activity('LookupActivity').output.firstRow.schema",
                                "type": "Expression"
                            },
                            "table": {
                                "value": "@activity('LookupActivity').output.firstRow.table",
                                "type": "Expression"
                            }
                        }
                    }
                ]
            }
        ],
        "annotations": [],
        "lastPublishTime": "2020-08-17T10:48:25Z"
    }
}

조회 데이터 세트

lookup 데이터 세트는 AzureBlobStorageLinkedService 형식으로 지정된 Azure Storage 조회 폴더의 sourcetable.json 파일입니다.

{
    "name": "LookupDataset",
    "properties": {
        "linkedServiceName": {
            "referenceName": "AzureBlobStorageLinkedService",
            "type": "LinkedServiceReference"
        },
        "annotations": [],
        "type": "Json",
        "typeProperties": {
            "location": {
                "type": "AzureBlobStorageLocation",
                "fileName": "sourcetable.json",
                "container": "lookup"
            }
        }
    }
}

복사 작업의 원본 데이터 세트

원본 데이터 세트는 SQL 테이블의 이름인 조회 작업의 출력을 사용합니다. 복사 작업은 이 SQL 테이블의 데이터를 Azure Blob Storage의 위치로 복사합니다. 위치는 sink 속성을 통해 지정합니다.

{
    "name": "SourceDataset",
    "properties": {
        "linkedServiceName": {
            "referenceName": "AzureSqlDatabase",
            "type": "LinkedServiceReference"
        },
        "parameters": {
            "schemaName": {
                "type": "string"
            },
            "tableName": {
                "type": "string"
            }
        },
        "annotations": [],
        "type": "AzureSqlTable",
        "schema": [],
        "typeProperties": {
            "schema": {
                "value": "@dataset().schemaName",
                "type": "Expression"
            },
            "table": {
                "value": "@dataset().tableName",
                "type": "Expression"
            }
        }
    }
}

복사 작업의 Sink 데이터 세트

복사 작업은 SQL 테이블의 데이터를 Azure Storage에 있는 csv 폴더의 filebylookup.csv 파일에 복사합니다. 이 파일은 AzureBlobStorageLinkedService 속성을 통해 지정합니다.

{
    "name": "SinkDataset",
    "properties": {
        "linkedServiceName": {
            "referenceName": "AzureBlobStorageLinkedService",
            "type": "LinkedServiceReference"
        },
        "parameters": {
            "schema": {
                "type": "string"
            },
            "table": {
                "type": "string"
            }
        },
        "annotations": [],
        "type": "DelimitedText",
        "typeProperties": {
            "location": {
                "type": "AzureBlobStorageLocation",
                "fileName": {
                    "value": "@{dataset().schema}_@{dataset().table}.csv",
                    "type": "Expression"
                },
                "container": "csv"
            },
            "columnDelimiter": ",",
            "escapeChar": "\\",
            "quoteChar": "\""
        },
        "schema": []
    }
}

sourcetable.json

sourcetable.json 파일에 대해 다음 두 종류의 형식을 사용할 수 있습니다.

개체의 집합

{
   "Id":"1",
   "schema":"dbo",
   "table":"Table1"
}
{
   "Id":"2",
   "schema":"dbo",
   "table":"Table2"
}

개체의 배열

[ 
    {
        "Id": "1",
        "schema":"dbo",
        "table":"Table1"
    },
    {
        "Id": "2",
        "schema":"dbo",
        "table":"Table2"
    }
]

제한 사항 및 해결 방법

조회 활동 및 제안된 해결 방법의 몇 가지 제한 사항은 다음과 같습니다.

제한 사항 해결 방법
조회 작업에는 최대 5,000개의 행 및 최대 4MB의 크기가 있습니다. 최대 행 수 또는 최대 크기를 초과하지 않는 데이터를 검색하는 내부 파이프라인을 통해 외부 파이프라인을 반복하는 두 수준의 파이프라인을 설계합니다.

Azure Data Factory 및 Synapse 파이프라인에서 지원하는 다른 제어 흐름 작업을 참조하세요.