Azure Data Factory 和 Synapse Analytics 中的 ORC 格式

適用於:Azure Data Factory Azure Synapse Analytics

當您想要 剖析 ORC 檔案或將資料寫入 ORC 格式時,請遵循這篇文章。

下列連接器支援 ORC 格式:Amazon S3、Amazon S3相容儲存體Azure BlobAzure Data Lake Storage Gen1Azure Data Lake Storage Gen2Azure 檔案儲存體檔案系統FTPGoogle Cloud 儲存體HDFSHTTPOracle Cloud 儲存體SFTP

資料集屬性

如需可用來定義資料集的區段和屬性完整清單,請參閱資料集一文。 本節提供 ORC 資料集所支援的屬性清單。

屬性 描述 必要
type 資料集的 type 屬性必須設定為 Orc Yes
location 檔案的位置設定。 每個以檔案為基礎的連接器在 location 底下皆具有自身的位置類型和支援屬性。 請參閱連接器文章 -> 資料集屬性一節中的詳細資料 Yes
compressionCodec 寫入 ORC 檔案時要使用的壓縮編解碼器。 從 ORC 檔案讀取時,Data Factory 會根據檔案中繼資料自動判斷壓縮編解碼器。
支援的類型 為 nonezlibsnappy (default) 和 lzo。 請注意,讀取/寫入 ORC 檔案時,目前複製活動不支援 LZO。

以下是 Azure Blob 儲存體 上 ORC 資料集的範例:

{
    "name": "OrcDataset",
    "properties": {
        "type": "Orc",
        "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",
            }
        }
    }
}

請注意下列幾點:

  • 複雜的資料類型 (例如 MAP、LIST、STRUCT) 目前僅在資料流程中受到支援,而不是在複製活動中。 若要在資料流程中使用複雜類型,請勿在資料集中匯入檔案架構,在資料集中保留架構空白。 然後,在 [來源] 轉換中,匯入投影。
  • 不支援資料行名稱中的空白字元。

複製活動屬性

如需可用來定義活動的區段和屬性完整清單,請參閱管線一文。 本節提供 ORC 來源和接收所支援的屬性清單。

ORC 作為來源

複製活動的 [來源] 區段支援下列屬性。

屬性 描述 必要
type 複製活動來源的 type 屬性必須設定為 OrcSource Yes
storeSettings 屬性群組,可決定從資料存放區讀取資料的方式。 每個以檔案為基礎的連接器在 storeSettings 底下皆具有自身的支援讀取設定。 請參閱連接器文章 -> 複製活動屬性一節中的詳細資料 No

ORC 作為接收

複製活動的 [接收] 區段支援下列屬性。

屬性 描述 必要
type 複製活動接收的 type 屬性必須設定為 OrcSink Yes
formatSettings 屬性群組。 請參閱下方 的 ORC 寫入設定 表。 No
storeSettings 屬性群組,可決定將資料寫入資料存放區的方式。 每個以檔案為基礎的連接器在 storeSettings 底下皆具有自身的支援寫入設定。 請參閱連接器文章 -> 複製活動屬性一節中的詳細資料 No

底下 formatSettings 支援的ORC 寫入設定

屬性 描述 必要
type formatSettings 的類型必須設定為 OrcWriteSettings Yes
maxRowsPerFile 當您將資料寫入資料夾時,可以選擇寫入多個檔案,並指定每個檔案的資料列上限。 No
fileNamePrefix maxRowsPerFile 完成設定時適用。
當您將資料寫入多個檔案時,請指定檔案名稱前置詞,使系統進行此模式:<fileNamePrefix>_00000.<fileExtension>。 如果未指定,系統會自動產生檔案名稱前置詞。 當來源是以檔案為基礎的存放區,或啟用資料分割選項的資料存放區時,系統不會套用此屬性。
No

對應資料流程屬性

在對應資料流程中,您可以在下列資料存放區中讀取和寫入 ORC 格式:Azure Blob 儲存體Azure Data Lake Storage Gen1Azure Data Lake Storage Gen2SFTP,也可以在Amazon S3中讀取 ORC 格式。

您可以使用 ORC 資料集或使用 內嵌資料集來指向 ORC 檔案。

來源屬性

下表列出 ORC 來源支援的屬性。 您可以在 [來源選項] 索引標籤中編輯這些屬性。

使用內嵌資料集時,您會看到其他檔案設定,這與 資料集屬性 一節中所述的屬性相同。

名稱 描述 必要 允許的值 資料流程指令碼屬性
格式 格式必須是 orc orc format
萬用字元路徑 系統會處理符合萬用字元路徑的所有檔案。 覆寫資料集的資料夾和檔案路徑集合。 String[] wildcardPaths
分割區根路徑 如果是分割的檔案資料,您可以輸入分割區根路徑,讀取作為資料行的分割資料夾 String partitionRootPath
檔案清單 您的來源是否指向列出待處理檔案的文字檔 truefalse fileList
儲存檔案名稱的資料行 使用來源檔案名稱和路徑,建立新的資料行 String rowUrlColumn
完成後 處理後刪除或移動檔案。 從容器根開始的檔案路徑 刪除:truefalse
移動:[<from>, <to>]
purgeFiles
moveFiles
依上次修改時間篩選 根據上次變更檔案的時間,選擇篩選的檔案 時間戳記 modifiedAfter
modifiedBefore
允許找不到檔案 如果為 true,找不到檔案時不會擲回錯誤 truefalse ignoreNoFilesFound

來源範例

ORC 來源組態的相關聯資料流程腳本為:

source(allowSchemaDrift: true,
    validateSchema: false,
    rowUrlColumn: 'fileName',
    format: 'orc') ~> OrcSource

接收屬性

下表列出 ORC 接收所支援的屬性。 您可以在 [設定] 索引標籤中編輯這些屬性。

使用內嵌資料集時,您會看到其他檔案設定,這與 資料集屬性 一節中所述的屬性相同。

名稱 描述 必要 允許的值 資料流程指令碼屬性
格式 格式必須是 orc orc format
清除資料夾 如果在進行寫入之前清除目的地資料夾 truefalse truncate
檔案名稱選項 已寫入資料的命名格式。 依預設,每個分割區的一個檔案會是 part-#####-tid-<guid> 格式 模式:String
每個分割區:String[]
作為資料行中的資料:String
輸出至單一檔案:['<fileName>']
filePattern
partitionFileNames
rowUrlColumn
partitionFileNames

接收範例

ORC 接收組態的相關資料流程腳本為:

OrcSource sink(
    format: 'orc',
    filePattern:'output[n].orc',
    truncate: true,
    allowSchemaDrift: true,
    validateSchema: false,
    skipDuplicateMapInputs: true,
    skipDuplicateMapOutputs: true) ~> OrcSink

使用自我裝載Integration Runtime

重要

若要讓自我裝載Integration Runtime所授權的複製,例如內部部署與雲端資料存放區之間,如果您未原狀複製 ORC 檔案,您必須在 IR 電腦上安裝64 位 JRE 8 (JAVA Runtime Environment) 或 OpenJDK並Microsoft Visual C++ 2010 可轉散發套件。 如需詳細資料,請查看下列段落。

針對在自我裝載 IR 上搭配 ORC 檔案序列化/還原序列化來執行的複製,服務會找出 JAVA 執行階段,方法是先檢查登錄 (SOFTWARE\JavaSoft\Java Runtime Environment\{Current Version}\JavaHome)是否有 JRE,如果找不到,就接著檢查系統變數JAVA_HOME是否有 OpenJDK。

  • 若要使用 JRE:64 位元 IR 需要 64 位元 JRE。 您可以從這裡找到該程式。
  • 若要使用 OpenJDK:自 IR 3.13 版起支援。 請將 jvm.dll 與所有其他必要的 OpenJDK 組件一起封裝至自我裝載 IR 機器,然後相應地設定 JAVA_HOME 系統環境變數。
  • 若要安裝 Visual C++ 2010 可轉散發套件:Visual C++ 2010 可轉散發套件未隨自我裝載 IR 安裝一起安裝。 您可以從這裡找到該程式。

提示

如果您使用自我裝載Integration Runtime將資料複製到 ORC 格式,並遇到錯誤指出「叫用 java 時發生錯誤,訊息:java.lang.OutOfMemoryError:JAVA 堆積空間」,您可以在裝載自我裝載 IR 的機器中新增環境變數 _JAVA_OPTIONS ,以調整 JVM 的最小/最大堆積大小,以啟用這類複製,然後重新執行管線。

Set JVM heap size on Self-hosted IR

範例:將變數 _JAVA_OPTIONS 的值設定為 -Xms256m -Xmx16g。 旗標 Xms 指定 JAVA 虛擬機器 (JVM) 的初始記憶體配置集區,而 Xmx 指定記憶體配置集區的最大值。 這表示 JVM 啟動時有 Xms 數量的記憶體,且最多可以使用 Xmx 數量的記憶體。 根據預設,服務會使用最小 64 MB 和最大 1G。

下一步