Azure Data Factory 和 Azure Synapse Analytics 中的 JSON 格式
適用於: Azure Data Factory Azure Synapse Analytics
提示
試用 Microsoft Fabric 中的 Data Factory,這是適用於企業的單一分析解決方案。 Microsoft Fabric 涵蓋從數據移動到數據科學、即時分析、商業智慧和報告等所有專案。 瞭解如何 免費啟動新的試用版 !
當您想要 剖析 JSON 檔案或將數據寫入 JSON 格式時,請遵循這篇文章。
下列連接器支援 JSON 格式:
- Amazon S3
- Amazon S3 相容 儲存體,
- Azure Blob
- Azure Data Lake Storage Gen1
- Azure Data Lake Storage Gen2 \(部分機器翻譯\)
- Azure 檔案
- 檔案系統
- FTP
- Google Cloud 儲存體
- Hdfs
- HTTP
- Oracle Cloud 儲存體
- SFTP
資料集屬性
如需可用來定義資料集之區段和屬性的完整清單,請參閱 數據集 一文。 本節提供 JSON 數據集所支援的屬性清單。
屬性 | 描述 | 必要 |
---|---|---|
type | 數據集的 type 屬性必須設定為 Json。 | Yes |
location | 檔案的位置設定。 每個檔案型連接器都有自己的位置類型和支持的屬性。location 請參閱連接器文章 -> 資料集屬性一節中的詳細數據。 |
Yes |
encodingName | 用來讀取/寫入測試檔案的編碼類型。 允許的值如下:“UTF-8”、“UTF-8 不含 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”、“CP866”、“IBM00858”、“IBM037”、“IBM273”、“IBM437”、“IBM500”、“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-12552”、“WINDOWS-1253”、“WINDOWS-1254”、“WINDOWS-1255”、“WINDOWS-1256”、“WINDOWS-1257”、“WINDOWS-1258”。 |
No |
壓縮 | 要配置檔案壓縮的屬性群組。 當您想要在活動執行期間執行壓縮/解壓縮時,請設定本節。 | No |
type (下 compression ) |
用來讀取/寫入 JSON 檔案的壓縮編解碼器。 允許的值為 bzip2、gzip、deflate、ZipDeflate、TarGzip、Tar、snappy 或 lz4。 默認值不會壓縮。 請注意,目前 複製活動 不支援 「snappy」 和 「lz4」,而對應數據流不支援 「ZipDeflate」、“TarGzip” 和 “Tar”。 請注意,使用複製活動將 ZipDeflate/TarGzip/Tar 檔案解壓縮並寫入檔案型接收數據存放區時,預設會擷取至 folder: <path specified in dataset>/<folder named as source compressed file>/ ,使用preserveCompressionFileNameAsFolder preserveZipFileNameAsFolder /複製活動來源來控制是否保留壓縮檔的名稱作為資料夾結構。 |
否。 |
level (下 compression ) |
壓縮比例。 允許的值為 最佳 或 最快值。 - 最快: 即使產生的檔案未以最佳方式壓縮,壓縮作業也應該儘快完成。 - 最佳:即使作業需要較長的時間才能完成,壓縮作業也應該以最佳方式壓縮。 如需詳細資訊,請參閱 壓縮層級 主題。 |
No |
以下是 Azure Blob 儲存體 上的 JSON 數據集範例:
{
"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"
}
}
}
}
複製活動 屬性
如需可用來定義活動的區段和屬性的完整清單,請參閱 管線 一文。 本節提供 JSON 來源和接收所支援的屬性清單。
瞭解如何從 JSON 檔案擷取數據,並對應至接收數據存放區/格式,反之亦然從 架構對應。
JSON 作為來源
複製活動 *source* 區段中支援下列屬性。
屬性 | 描述 | 必要 |
---|---|---|
type | 複製活動來源的 type 屬性必須設定為 JSONSource。 | Yes |
format 設定 | 屬性群組。 請參閱下面的 JSON 讀取設定表。 | No |
store 設定 | 如何從數據存放區讀取數據的一組屬性。 每個檔案型連接器在 下 storeSettings 都有自己的支援讀取設定。 請參閱連接器文章 -> 複製活動 屬性一節中的詳細數據。 |
No |
支援的 JSON 讀取設定:formatSettings
屬性 | 描述 | 必要 |
---|---|---|
type | 格式的類型 設定 必須設定為 JsonRead 設定。 | Yes |
compressionProperties | 如何解壓縮指定壓縮編解碼器之數據的屬性群組。 | No |
preserveZipFileNameAsFolder (下 compressionProperties ->type as ZipDeflateReadSettings ) |
當輸入數據集設定為 ZipDeflate 壓縮時適用。 指出是否要在複製期間保留來源 zip 檔名作為資料夾結構。 - 當設定為 true (預設值)時,服務會將解壓縮的檔案寫入至 <path specified in dataset>/<folder named as source zip file>/ 。- 當設定為 false 時,服務會將解壓縮的檔案直接寫入 。 <path specified in dataset> 請確定您在不同的來源 zip 檔案中沒有重複的檔名,以避免發生賽車或非預期的行為。 |
No |
preserveCompressionFileNameAsFolder (在 compressionProperties ->type as TarGZipReadSettings 或 TarReadSettings ) |
當輸入數據集設定為 TarGzip/Tar 壓縮時適用。 指出是否要在複製期間保留來源壓縮檔名做為資料夾結構。 - 當設定為 true(預設值)時,服務會將解壓縮的檔案寫入至 <path specified in dataset>/<folder named as source compressed file>/ 。 - 當設定為 false 時,服務會將解壓縮的檔案直接寫入 。 <path specified in dataset> 請確定您在不同的原始程式檔中沒有重複的檔名,以避免發生賽車或非預期的行為。 |
No |
JSON 作為接收
複製活動 *sink* 區段中支援下列屬性。
屬性 | 描述 | 必要 |
---|---|---|
type | 複製活動來源的 type 屬性必須設定為 JSONSink。 | Yes |
format 設定 | 屬性群組。 請參閱下面的 JSON 寫入設定表。 | No |
store 設定 | 如何將數據寫入數據存放區的屬性群組。 每個檔案型連接器在下 storeSettings 都有自己的支援寫入設定。 請參閱連接器文章 -> 複製活動 屬性一節中的詳細數據。 |
No |
支援的 JSON 寫入設定:formatSettings
屬性 | 描述 | 必要 |
---|---|---|
type | 格式的類型 設定 必須設定為 JsonWrite 設定。 | Yes |
filePattern | 指出儲存在每個 JSON 檔案中的數據模式。 允許的值為: setOfObjects (JSON Lines) 和 arrayOfObjects。 默認值為 setOfObjects。 如需這些模式的詳細資訊,請參閱 JSON 檔案模式一節。 | No |
JSON 檔案模式
從 JSON 檔案複製資料時,複製活動可以自動偵測並剖析下列 JSON 檔案模式。 將數據寫入 JSON 檔案時,您可以在複製活動接收上設定檔案模式。
類型 I:setOfObjects
每個檔案都包含單一物件、JSON 行或串連物件。
單一物件 JSON 範例
{ "time": "2015-04-29T07:12:20.9100000Z", "callingimsi": "466920403025604", "callingnum1": "678948008", "callingnum2": "567834760", "switch1": "China", "switch2": "Germany" }
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"}
串連 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" }
類型 II:arrayOfObjects
每個檔案都包含 對象的陣列。
[ { "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" } ]
對應數據流屬性
在對應數據流中,您可以在下列數據存放區中讀取和寫入 JSON 格式:Azure Blob 儲存體、Azure Data Lake 儲存體 Gen1、Azure Data Lake 儲存體 Gen2 和 SFTP,而且您可以在 Amazon S3 中讀取 JSON 格式。
來源屬性
下表列出 json 來源所支持的屬性。 您可以在 [ 來源選項 ] 索引標籤編輯這些屬性。
名稱 | 描述 | 必要 | 允許的值 | 數據流腳本屬性 |
---|---|---|---|---|
通配符路徑 | 將會處理符合通配符路徑的所有檔案。 覆寫數據集中設定的資料夾和檔案路徑。 | 否 | String[] | 通配符路徑 |
數據分割根路徑 | 針對分割的檔案數據,您可以輸入資料分割根路徑,以將數據分割資料夾讀取為數據行 | 否 | String | partitionRootPath |
檔案清單 | 您的來源是否指向列出要處理的檔案的文字檔 | 否 | true 或 false |
fileList |
要儲存檔名的數據行 | 使用來源檔名和路徑建立新的數據行 | 否 | String | rowUrlColumn |
完成之後 | 在處理之後刪除或移動檔案。 檔案路徑從容器根目錄開始 | 否 | 刪除: true 或 false 移動: ['<from>', '<to>'] |
purgeFiles moveFiles |
依上次修改日期來篩選 | 選擇根據上次更改檔案的時間篩選檔案 | 否 | 時間戳記 | modifiedAfter modifiedBefore |
單一檔 | 對應數據流會從每個檔案讀取一個 JSON 檔 | 否 | true 或 false |
singleDocument |
未加上批註的數據行名稱 | 如果 選取 [未批注的數據行名稱 ],對應數據流會讀取未以引號括住的 JSON 數據行。 | 否 | true 或 false |
unquotedColumnNames |
具有批注 | 如果 JSON 數據具有 C 或 C++ 樣式批注,請選取 [有批注 ] | 否 | true 或 false |
asComments |
單引號 | 讀取未以引弧括住的 JSON 數據行 | 否 | true 或 false |
singleQuoted |
反斜杠逸出 | 如果使用反斜杠來逸出 JSON 數據中的字元,請選取 [反斜 杠逸出] | 否 | true 或 false |
backslashEscape |
允許找不到任何檔案 | 如果為 true,則找不到任何檔案時不會擲回錯誤 | 否 | true 或 false |
ignoreNoFilesFound |
內嵌數據集
對應數據流支援「內嵌數據集」作為定義來源和接收的選項。 內嵌 JSON 資料集會直接定義在您的來源和接收轉換內,且不會在定義的數據流外部共用。 它適用於直接在數據流內參數化數據集屬性,並可受益於透過共用ADF數據集改善的效能。
當您讀取大量來源資料夾和檔案時,您可以藉由在投影內設定 [使用者投影架構] 選項來改善數據流檔案探索的效能 |[架構選項] 對話框。 此選項會關閉ADF的預設架構自動探索,並大幅改善檔案探索的效能。 設定此選項之前,請務必匯入 JSON 投影,讓 ADF 具有現有的投影架構。 此選項不適用於架構漂移。
來源格式選項
使用 JSON 資料集作為數據流中的來源,可讓您設定五個額外的設定。 您可以在 [來源選項] 索引標籤的 [JSON 設定] 雅閣下找到這些設定。針對 [文件表單體] 設定,您可以選取 [單一檔]、[每行檔] 和 [文件陣列] 類型的其中一個。
預設
根據預設,JSON 數據會以下列格式讀取。
{ "json": "record 1" }
{ "json": "record 2" }
{ "json": "record 3" }
單一檔
如果 選取 [單一檔 ],對應數據流會從每個檔案讀取一個 JSON 檔。
File1.json
{
"json": "record 1"
}
File2.json
{
"json": "record 2"
}
File3.json
{
"json": "record 3"
}
如果 選取 [每行 檔],對應數據流會從檔案中的每個行讀取一個 JSON 檔。
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"}
如果 選取檔 陣列,對應資料流會從檔案讀取一個檔陣列。
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"
}
]
注意
如果數據流在預覽 JSON 數據時擲回錯誤,指出「corrupt_record」,您的數據很可能在 JSON 檔案中包含單一檔。 設定「單一檔」應該清除該錯誤。
未加上批註的數據行名稱
如果 選取 [未批注的數據行名稱 ],對應數據流會讀取未以引號括住的 JSON 數據行。
{ json: "record 1" }
{ json: "record 2" }
{ json: "record 3" }
具有批注
如果 JSON 數據具有 C 或 C++ 樣式批注,請選取 [有批注 ]。
{ "json": /** comment **/ "record 1" }
{ "json": "record 2" }
{ /** comment **/ "json": "record 3" }
單引號
如果 JSON 欄位和值使用單引號,而不是雙引號,請選取 [單 引號]。
{ 'json': 'record 1' }
{ 'json': 'record 2' }
{ 'json': 'record 3' }
反斜杠逸出
如果使用反斜杠來逸出 JSON 數據中的字元,請選取 [反斜 杠逸出]。
{ "json": "record 1" }
{ "json": "\} \" \' \\ \n \\n record 2" }
{ "json": "record 3" }
接收屬性
下表列出 json 接收所支持的屬性。 您可以在 [設定] 索引標籤編輯這些屬性。
名稱 | 描述 | 必要 | 允許的值 | 數據流腳本屬性 |
---|---|---|---|---|
清除資料夾 | 如果在寫入之前清除目的地資料夾 | 否 | true 或 false |
truncate |
檔名選項 | 寫入數據的命名格式。 根據預設,每個分割區一個檔案的格式為 part-#####-tid-<guid> |
否 | 模式:字串 每個分割區:String[] 當做數據行中的數據:字串 輸出至單一檔案: ['<fileName>'] |
filePattern partitionFileNames rowUrlColumn partitionFileNames |
在衍生數據行中建立 JSON 結構
您可以透過衍生的數據行表達式產生器,將複雜數據行新增至數據流。 在衍生的數據行轉換中,新增數據行,然後按兩下藍色方塊來開啟表示式產生器。 若要使數據行變得複雜,您可以手動輸入 JSON 結構,或使用 UX 以互動方式新增子數據行。
使用表達式產生器 UX
在輸出架構側邊窗格中,將滑鼠停留在數據行上,然後按下加號圖示。 選取 [新增子欄 ],使數據行成為複雜類型。
您可以以相同方式新增其他資料行和子數據行。 對於每個非複雜欄位,表達式可以在右側的表達式編輯器中新增。
手動輸入 JSON 結構
若要手動新增 JSON 結構,請新增數據行,然後在編輯器中輸入表達式。 運算式遵循下列一般格式:
@(
field1=0,
field2=@(
field1=0
)
)
如果為名為 「complexColumn」 的資料行輸入此運算式,則會以下列 JSON 形式寫入接收:
{
"complexColumn": {
"field1": 0,
"field2": {
"field1": 0
}
}
}
完整階層式定義的範例手動腳本
@(
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
]
)
相關連接器和格式
以下是一些與 JSON 格式相關的常見連接器和格式:
- Azure Blob 儲存體(connector-azure-blob-storage.md)
- 分隔文字格式(format-delimited-text.md)
- OData 連接器(connector-odata.md)
- Parquet 格式(format-parquet.md)