Aktivitas pencarian di Azure Data Factory dan Azure Synapse Analytics

BERLAKU UNTUK: Azure Data Factory Azure Synapse Analytics

Aktivitas pencarian dapat mengambil himpunan data dari salah satu sumber data yang didukung oleh pabrik data dan alur Synapse. Anda dapat menggunakannya untuk secara dinamis menentukan objek mana yang akan dioperasikan dalam aktivitas berikutnya, alih-alih mengodekan nama objek secara keras. Beberapa contoh objek adalah file dan tabel.

Aktivitas pencarian membaca dan mengembalikan konten file konfigurasi atau tabel. Aktivitas ini juga mengembalikan hasil dari menjalankan kueri atau prosedur yang disimpan. Output dapat menjadi nilai singleton atau array atribut, yang dapat dikonsumsi dalam salinan, transformasi, atau aktivitas aliran kontrol berikutnya seperti aktivitas ForEach.

Kemampuan yang didukung

Perhatikan hal-hal berikut:

  • Aktivitas Pencarian dapat mengembalikan hingga 5000 baris; jika kumpulan hasil berisi lebih banyak rekaman, 5000 baris pertama akan dikembalikan.
  • Output Aktivitas pencarian mendukung ukuran hingga 4 MB, kegiatan akan gagal jika ukuran melebihi batas.
  • Durasi terpanjang untuk Aktivitas pencarian sebelum waktu habis adalah 24 jam.
  • Saat Anda menggunakan kueri atau prosedur yang disimpan untuk mencari data, pastikan untuk mengembalikan satu dan persis satu rangkaian hasil. Jika tidak, Aktivitas pencarian akan gagal.

Sumber data berikut didukung untuk Aktivitas pencarian.

Kategori Penyimpanan data
Azure Azure Blob Storage
  Azure Cosmos DB (SQL API)
  Azure Data Explorer (Kusto)
  Azure Data Lake Storage Gen1
  Azure Data Lake Storage Gen2
  Azure Database untuk MariaDB
  Azure Database untuk MySQL
  Azure Database untuk PostgreSQL
  Azure Databricks Delta Lake
  File Azure
  Azure SQL Database
  Azure SQL Database Managed Instance
  Azure Synapse Analytics
  Penyimpanan Tabel Azure
Database Amazon RDS untuk Oracle
  Amazon RDS untuk SQL Server
  Amazon Redshift
  Apache Impala
  Azure SQL Database Managed Instance
  DB2
  Drill
  Google AdWords
  Google BigQuery
  Greenplum
  HBase
  Hive
  Informix
  MariaDB
  Microsoft Access
  MySQL
  Netezza
  Oracle
  Phoenix
  PostgreSQL
  Presto
  Open Hub SAP Business Warehouse
  SAP Business Warehouse melalui MDX
  SAP HANA
  Tabel SAP
  SQL Server
  Spark
  Sybase
  Teradata
  Vertica
NoSQL Cassandra
  Couchbase (Pratinjau)
File Amazon S3
  Penyimpanan yang Kompatibel dengan Amazon S3
  Sistem File
  FTP
  Google Cloud Storage
  HDFS
  HTTP Generik
  Penyimpanan Cloud Oracle
  SFTP
Protokol generik OData Generik
  ODBC Generik
  REST
  Daftar SharePoint Online
Layanan dan aplikasi Layanan Web Marketplace Amazon
  Concur (Pratinjau)
  Dataverse
  Dynamics 365
  Dynamics AX
  Dynamics CRM
  HubSpot
  Jira
  Azure Data Explorer (Kusto)
  Magento (Pratinjau)
  Marketo (Pratinjau)
  Office 365
  Oracle Eloqua (Pratinjau)
  Oracle Responsys (Pratinjau)
  Oracle Service Cloud (Pratinjau)
  PayPal (Pratinjau)
  QuickBooks (Pratinjau)
  REST
  SAP Cloud untuk Pelanggan (C4C)
  SAP ECC
  Salesforce
  Marketing Cloud Salesforce
  Cloud Layanan Salesforce
  ServiceNow
  Shopify (Pratinjau)
  Snowflake
  Square (Pratinjau)
  Tabel Web (tabel HTML)
  Xero
  Zoho (Pratinjau)

Catatan

Semua konektor ditandai sebagai Pratinjau yang berarti Anda dapat mencobanya dan memberi kami umpan balik. Jika Anda ingin mengambil dependensi pada konektor pratinjau dalam solusi Anda, hubungi Dukungan Azure.

Sintaks

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

Properti jenis

Nama Deskripsi Jenis Diperlukan?
himpunan data Menyediakan referensi himpunan data untuk pencarian. Dapatkan detail dari bagian Properti himpunan data di setiap artikel konektor terkait. Pasangan kunci/nilai Ya
sumber Berisi properti sumber himpunan data tertentu, sama dengan sumber Aktivitas Salin. Dapatkan detail dari bagian properti Aktivitas Salin di setiap artikel konektor terkait. Pasangan kunci/nilai Ya
firstRowOnly Menunjukkan apakah hanya mengembalikan baris pertama atau semua baris. Boolean Nomor. Defaultnya adalah true.

Catatan

  • Kolom sumber dengan jenis ByteArray tidak didukung.
  • Struktur tidak didukung dalam definisi himpunan data. Untuk file format teks, gunakan baris header untuk menyediakan nama kolom.
  • Jika sumber pencarian Anda adalah file JSON, maka pengaturan jsonPathDefinition untuk membentuk kembali objek JSON tidak didukung. Seluruh objek akan diambil.

Menggunakan hasil Aktivitas pencarian

Hasil pencarian dikembalikan di bagian output hasil menjalankan aktivitas.

  • Ketika firstRowOnly diatur ke true (default) , format output akan ditunjukkan seperti dalam kode berikut. Hasil pencarian berada pada kunci firstRow tetap. Untuk menggunakan hasilnya dalam aktivitas berikutnya, gunakan pola @{activity('LookupActivity').output.firstRow.table}.

    {
        "firstRow":
        {
            "Id": "1",
            "schema":"dbo",
            "table":"Table1"
        }
    }
    
  • Ketika firstRowOnly diatur ke false , format output akan ditunjukkan seperti dalam kode berikut. Bidang count menunjukkan berapa banyak rekaman yang dikembalikan. Nilai terperinci ditampilkan pada array value tetap. Dalam kasus seperti itu, Aktivitas pencarian diikuti oleh aktivitas Foreach. Anda melewati array value ke bidang aktivitas ForEach items dengan menggunakan pola @activity('MyLookupActivity').output.value. Untuk mengakses elemen dalam array value, gunakan sintaks berikut: @{activity('lookupActivity').output.value[zero based index].propertyname}. Contohnya adalah @{activity('lookupActivity').output.value[0].schema}.

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

Contoh

Dalam contoh ini, alur berisi dua aktivitas: Pencarian dan Salin. Aktivitas Salin menyalin data dari tabel SQL di instans Azure SQL Database Anda ke penyimpanan Azure Blob. Nama tabel SQL disimpan dalam file JSON di penyimpanan Blob. Aktivitas Pencarian mencari nama tabel pada waktu proses. JSON dimodifikasi secara dinamis menggunakan pendekatan ini. Anda tidak perlu melakukan menyebarkan ulang alur atau himpunan data.

Contoh ini menunjukkan pencarian untuk baris pertama saja. Untuk mencari semua baris dan mengaitkan hasilnya dengan aktivitas ForEach, lihat contoh di Menyalin beberapa tabel secara massal.

Alur

  • Aktivitas pencarian dikonfigurasi untuk menggunakan LookupDataset, yang merujuk ke lokasi di penyimpanan Azure Blob. Aktivitas pencarian membaca nama tabel SQL dari file JSON di lokasi ini.
  • Aktivitas Salin menggunakan output Aktivitas pencarian, yang merupakan nama tabel SQL. Properti tableName di SourceDataset dikonfigurasi untuk menggunakan output dari Aktivitas pencarian. Aktivitas Salin menyalin data dari tabel SQL ke lokasi di penyimpanan Azure Blob. Lokasi ditentukan oleh properti 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"
    }
}

Himpunan data pencarian

Himpunan data Pencarian adalah file sourcetable.js di folder pencarian Azure Storage yang ditentukan oleh jenis AzureBlobStorageLinkedService.

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

Himpunan data Sumber untuk Aktivitas Salin

Himpunan data sumber menggunakan output aktivitas Pencarian, yang merupakan nama tabel SQL. Aktivitas Salin menyalin data dari tabel SQL ini ke lokasi di penyimpanan Azure Blob. Lokasi ditentukan oleh himpunan data 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"
            }
        }
    }
}

Himpunan data sink untuk Aktivitas Salin

Aktivitas Salin menyalin data dari tabel SQL ke filebylookup.csv di folder csv di Azure Storage. File ditentukan oleh properti 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

Anda dapat menggunakan dua jenis format berikut untuk file sourcetable.jspada.

Himpunan objek

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

Array objek

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

Batasan dan solusi

Berikut adalah beberapa keterbatasan aktivitas Pencarian dan solusi yang disarankan.

Batasan Solusi Sementara
Aktivitas pencarian memiliki maksimum 5.000 baris, dan ukuran maksimum 4 MB. Merancang alur dua tingkat, di mana alur luar berulang di atas alur dalam, yang mengambil data yang tidak melebihi baris atau ukuran maksimum.

Langkah berikutnya

Lihat aktivitas alur kontrol lainnya yang didukung oleh Azure Data Factory dan alur Synapse: