適用於:
Azure Data Factory
Azure Synapse Analytics
提示
Data Factory in Microsoft Fabric 是下一代的 Azure Data Factory,擁有更簡單的架構、內建 AI 及新功能。 如果你是資料整合新手,建議先從 Fabric Data Factory 開始。 現有的 ADF 工作負載可升級至 Fabric,以存取資料科學、即時分析與報告等新能力。
當您想要剖析 JSON 檔案或將資料寫入 JSON 格式時,請遵循本文內容來進行作業。
下列連接器支援 JSON 格式:
- Amazon S3
- Amazon S3 相容儲存體,
- Azure 黏液
- Azure Data Lake Storage Gen1
- Azure Data Lake Storage Gen2
- Azure 檔案儲存體
- 檔案系統
- FTP
- 谷歌雲存儲
- HDFS
- HTTP
- Oracle 雲端儲存空間
- SFTP
資料集屬性
如需可用來定義資料集的區段和屬性完整清單,請參閱資料集一文。 本節提供 JSON 資料集所支援的屬性清單。
| 屬性 | 描述 | 必要 |
|---|---|---|
| 型別 | 資料集的 type 屬性必須設定為 Json。 | Yes |
| 位置 | 檔案的位置設定。 每個檔案型連接器都包含專屬的位置類型,並支援 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"、"IBM00858"、"IBM037"、"IBM273"、"IBM437"、"IBM500"、"IBM737"、"IBM775"、"IBM850"、"IBM852"、"IBM855"、"IBM857"、"IBM860"、"IBM861"、"IBM863"、"IBM864"、"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-1252"、"WINDOWS-1253"、"WINDOWS-1254"、"WINDOWS-1255"、"WINDOWS-1256"、"WINDOWS-1257"、"WINDOWS-1258"。 |
No |
| 壓縮 | 設定檔案壓縮的屬性群組。 當您要在活動執行期間執行壓縮/解壓縮時,請設定此區段。 | No |
| 型別 (在 compression 下) |
用來讀取/寫入 JSON 檔案的壓縮轉碼器。 允許的值為 bzip2、gzip、deflate、ZipDflate、TarGzip、Tar、snappy 或 lz4。 預設為不壓縮。 Note 目前複製活動不支援「snappy」和「lz4」,映射資料流也不支援「ZipDeflate」、「TarGzip」和「Tar」。 請注意,使用複製活動將 ZipDeflate/TarGzip/Tar 檔案解壓縮並寫入檔案型接收資料存放區時,預設會將檔案擷取至資料夾: <path specified in dataset>/<folder named as source compressed file>/,在preserveZipFileNameAsFolder上使用 /preserveCompressionFileNameAsFolder 來控制是否要保留壓縮檔的名稱做為資料夾結構。 |
否。 |
| 水平儀 (在 compression 下) |
壓縮比。 允許的值為 Optimal 或 Fastest。 - Fastest:即使產生的檔案不以最佳方式壓縮,也應盡快完成壓縮作業。 - Optimal:即使作業需要較長時間完成,壓縮作業也應以最佳方式壓縮。 如需詳細資訊,請參閱 壓縮層級 主題。 |
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 做為來源
複製活動的 [來源] 區段支援下列屬性。
| 屬性 | 描述 | 必要 |
|---|---|---|
| 型別 | 複製活動來源的型別屬性必須設定為:JSONSource。 | Yes |
| formatSettings | 屬性群組。 請參閱以下 JSON 讀取設定資料表。 | No |
| storeSettings | 屬性群組,可決定從資料存放區讀取資料的方式。 在 storeSettings 下,每個檔案型連接器都包含專屬的支援讀取設定。
詳見連接器條目 -> 複製活動 屬性章節。 |
No |
支援 下的 formatSettings:
| 屬性 | 描述 | 必要 |
|---|---|---|
| 型別 | formatSettings 的型別必須設定為 JsonReadSettings。 | Yes |
| compressionProperties | 關於如何針對指定的壓縮轉碼器解壓縮資料的一組屬性。 | No |
| preserveZipFileNameAsFolder ( compressionProperties->type 下為 ZipDeflateReadSettings) |
將輸入資料集設定為使用 ZipDeflate 壓縮時適用。 指出是否要在複製期間保留來源 ZIP 檔案名稱做為資料夾結構。 - 設定為 true (預設) 時,服務會將解壓縮的檔案寫入 <path specified in dataset>/<folder named as source zip file>/。- 設定為 false 時,服務會將解壓縮的檔案直接寫入 <path specified in dataset>。 請確定不同的來源 ZIP 檔案中沒有重複的檔案名稱,以避免發生競爭或非預期的行為。 |
No |
| preserveCompressionFileNameAsFolder ( compressionProperties->type 下為 TarGZipReadSettings 或 TarReadSettings) |
將輸入資料集設定為使用 TarGzip/Tar 壓縮時適用。 指出是否要在複製期間保留來源壓縮檔案名稱做為資料夾結構。 - 設定為 true (預設) 時,服務會將解壓縮的檔案寫入 <path specified in dataset>/<folder named as source compressed file>/。 - 設定為 false 時,服務會將解壓縮的檔案直接寫入 <path specified in dataset>。 請確定不同的來源檔案中沒有重複的檔案名稱,以避免發生競爭或非預期的行為。 |
No |
JSON 做為接收
複製活動的 [接收] 區段支援下列屬性。
| 屬性 | 描述 | 必要 |
|---|---|---|
| 型別 | 複製活動來源的 type 屬性必須設定為 JSONSink。 | Yes |
| formatSettings | 屬性群組。 請參閱下方 JSON 寫入設定資料表。 | No |
| storeSettings | 屬性群組,可決定將資料寫入資料存放區的方式。 每個以檔案為基礎的連接器在 storeSettings 底下皆具有自身的支援寫入設定。
詳見連接器條目 -> 複製活動 屬性章節。 |
No |
底下的支援 formatSettings:
| 屬性 | 描述 | 必要 |
|---|---|---|
| 型別 | formatSettings 的型別必須設定為 JsonWriteSettings。 | Yes |
| filePattern | 表示每個 JSON 檔案中儲存的資料模式。 允許的值為︰setOfObjects (JSON 行) 和 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" } ]
對應資料流程屬性
在 mapping data flows中,你可以在以下資料儲存庫中讀寫 JSON 格式:Azure Blob 儲存體、Azure Data Lake Storage Gen1、Azure Data Lake Storage Gen2 和 SFTP,你也可以閱讀 Amazon S3 的 JSON 格式。
來源屬性
下表列出 json 來源所支援的屬性。 您可以在 [來源選項] 索引標籤中編輯這些屬性。
| 名稱 | 描述 | 必要 | 允許的值 | 資料流程指令碼屬性 |
|---|---|---|---|---|
| 萬用字元路徑 | 系統會處理符合萬用字元路徑的所有檔案。 覆寫資料集的資料夾和檔案路徑集合。 | 否 | String[] | wildcardPaths |
| 分割區根路徑 | 如果是分割的檔案資料,您可以輸入分割區根路徑,讀取作為資料行的分割資料夾 | 否 | 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 |
截斷 |
| 檔案名稱選項 | 已寫入資料的命名格式。 依預設,每個分割區的一個檔案會是 part-#####-tid-<guid> 格式 |
否 | 模式:String 每個分割區:String[] 作為資料行中的資料: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 格式相關的常見連接器和格式: