使用 Azure 数据工厂 或 Synapse Analytics 从SAP HANA复制数据

适用于: Azure 数据工厂 Azure Synapse Analytics

本文概述了如何使用 Azure 数据工厂 和 Synapse Analytics 管道中的复制活动从SAP HANA数据库复制数据。 基于提供复制活动一般概述的复制活动概述一文。

提示

若要了解 SAP 数据集成方案的总体支持,请参阅 SAP 数据集成白皮书,并详细介绍了每个 SAP 连接器、比较和指南。

支持的功能

以下功能支持此SAP HANA连接器:

支持的功能 IR
复制活动 (源/接收器) ②
查询活动 ②

(1) Azure集成运行时 (2) 自承载集成运行时

有关复制活动支持作为源/接收器的数据存储列表,请参阅支持的数据存储表。

具体而言,此SAP HANA连接器支持:

  • 从任何版本的 SAP HANA 数据库复制数据。
  • 从 HANA 信息模型(如分析和计算视图)和行/列表中复制数据。
  • 使用 Basic 或 Windows 身份验证复制数据。
  • 从SAP HANA源进行并行复制。 详情请参阅 从 SAP HANA 平行复制 一节。

提示

若要复制数据into SAP HANA数据存储,请使用泛型 ODBC 连接器。 有关详细信息,请参阅 SAP HANA 接收器部分。 请注意,SAP HANA 连接器和 ODBC 连接器的链接服务类型不同,因此无法重复使用。

先决条件

若要使用此SAP HANA连接器,需要:

入门

若要使用管道执行复制活动,可以使用以下工具或 SDK 之一:

使用 UI 创建指向SAP HANA的链接服务

使用以下步骤在 Azure 门户 UI 中创建到 SAP HANA 的链接的服务。

  1. 浏览到Azure 数据工厂或 Synapse 工作区中的“管理”选项卡并选择“链接服务”,然后单击“新建”:

  2. 搜索 SAP 并选择SAP HANA连接器。

     SAP HANA 连接器的屏幕截图。

  3. 配置服务详细信息、测试连接并创建新的链接服务。

    SAP HANA 的链接服务配置截图

连接器配置详细信息

以下部分提供有关用于定义特定于SAP HANA连接器的数据工厂实体的属性的详细信息。

连接的服务属性

SAP HANA链接服务支持以下属性:

属性 描述 必需
类型 type 属性必须设置为:SapHana 是
connectionString 使用 basic authentication 或 Windows 身份验证 指定连接到SAP HANA所需的信息。 请参阅以下示例。
在连接字符串中,服务器/端口是必需的(默认端口为 30015),使用基本身份验证时,用户名和密码是必需的。 有关其他高级设置,请参阅 SAP HANA ODBC 连接属性
还可以将密码放入Azure 密钥保管库,并从连接字符串拉取密码配置。 有关更多信息,请参阅 Azure 密钥保管库 中存储凭据 一文。
是
userName 使用Windows 身份验证时指定用户名。 示例: user@domain.com 否
密码 指定用户帐户的密码。 将此字段标记为 SecureString 以安全地存储它,或引用存储在 Azure 密钥保管库 中的机密。 否
connectVia 连接到数据存储时要使用的Integration Runtime。 Prerequisites中所述,需要自托管型集成运行时。 是

示例:使用基本身份验证

{
    "name": "SapHanaLinkedService",
    "properties": {
        "type": "SapHana",
        "typeProperties": {
            "connectionString": "SERVERNODE=<server>:<port (optional)>;UID=<userName>;PWD=<Password>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

示例:使用 Windows 身份验证

{
    "name": "SapHanaLinkedService",
    "properties": {
        "type": "SapHana",
        "typeProperties": {
            "connectionString": "SERVERNODE=<server>:<port (optional)>;",
            "userName": "<username>", 
            "password": { 
                "type": "SecureString", 
                "value": "<password>" 
            } 
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

如果您使用含有以下有效负载的SAP HANA连接服务,仍然可以按原样支持,同时建议您今后使用新的连接服务。

示例:

{
    "name": "SapHanaLinkedService",
    "properties": {
        "type": "SapHana",
        "typeProperties": {
            "server": "<server>:<port (optional)>",
            "authenticationType": "Basic",
            "userName": "<username>",
            "password": {
                "type": "SecureString",
                "value": "<password>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

数据集属性

有关可用于定义数据集的各部分和属性的完整列表,请参阅数据集一文。 本部分提供SAP HANA数据集支持的属性列表。

若要从SAP HANA复制数据,支持以下属性:

属性 描述 必需
类型 数据集的 type 属性必须设置为:SapHanaTable 是
架构 SAP HANA数据库中架构的名称。 否(如果在活动源中指定了"query")
表 SAP HANA数据库中表的名称。 否(如果在活动源中指定了"query")

示例:

{
    "name": "SAPHANADataset",
    "properties": {
        "type": "SapHanaTable",
        "typeProperties": {
            "schema": "<schema name>",
            "table": "<table name>"
        },
        "schema": [],
        "linkedServiceName": {
            "referenceName": "<SAP HANA linked service name>",
            "type": "LinkedServiceReference"
        }
    }
}

如果使用 RelationalTable 类型数据集,该数据集仍按原样受支持,但我们建议今后使用新数据集。

复制活动 属性

有关可用于定义活动的各部分和属性的完整列表,请参阅管道一文。 本部分提供SAP HANA源支持的属性列表。

SAP HANA作为源

提示

若要通过数据分区高效地从SAP HANA导入数据,请参阅从SAP HANA进行并行复制部分以了解更多信息。

若要从 SAP HANA 复制数据,复制活动 source 节支持以下属性:

属性 描述 必需
类型 复制活动源的 type 属性必须设置为:SapHanaSource 是
查询 指定要从SAP HANA实例读取数据的 SQL 查询。 是
分区选项 指定用于从SAP HANA引入数据的数据分区选项。 从SAP HANA 并行复制了解更多信息。
允许的值有: 无 (默认)、 PhysicalPartitionsOfTable、 SapHanaDynamicRange。 从SAP HANA 并行复制了解更多信息。 PhysicalPartitionsOfTable 只能在从表而非查询中复制数据时使用。
启用分区选项(即,不是 None),从SAP HANA并发加载数据的并行度由复制活动的 parallelCopies 设置控制。
假
分区设置 指定数据分区的设置组。
当分区选项是 SapHanaDynamicRange 时适用。
假
partitionColumnName 指定分区用于并行复制时使用的源列名称。 如果你没有指定这个值,表的索引或主键会被自动检测并用作分区列。
当分区选项是 SapHanaDynamicRange 时适用。 如果使用查询来检索源数据,请在 WHERE 子句中添加 ?AdfHanaDynamicRangePartitionCondition。 请参见 SAP HANA 的并行复制示例。
在使用 SapHanaDynamicRange 分区时为“是”。
数据包大小 指定网络数据包大小 (KB),以便将数据拆分成多个块。 如果要从SAP HANA复制大量数据,在大多数情况下,增大数据包大小可能会提高读取速度。 调整数据包大小时,建议进行性能测试。 否。
默认值为 2048 (2MB)。

示例:

"activities":[
    {
        "name": "CopyFromSAPHANA",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<SAP HANA input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "SapHanaSource",
                "query": "<SQL query for SAP HANA>"
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

如果使用 RelationalSource 类型复制源,该源仍按原样受支持,但我们建议今后使用新源。

从SAP HANA并行复制

SAP HANA连接器提供内置的数据分区,以并行复制SAP HANA中的数据。 可以在复制活动的“源”表中找到数据分区选项。

分区选项的屏幕截图

启用分区复制时,服务会针对SAP HANA源运行并行查询,以便按分区检索数据。 可通过复制活动中的 parallelCopies 设置来控制并行度。 例如,如果将 parallelCopies 设置为 4,则服务会根据指定的分区选项和设置同时生成并运行四个查询,并且每个查询从SAP HANA检索一部分数据。

建议使用数据分区启用并行复制,尤其是在从SAP HANA引入大量数据时。 下面是适用于不同方案的建议配置。 将数据复制到基于文件的数据存储中时,建议将数据作为多个文件写入文件夹(仅指定文件夹名称),在这种情况下,性能优于写入单个文件。

场景 建议的设置
从大型表进行完整加载。 分区选项:表的物理分区。

在执行期间,服务会自动检测指定SAP HANA表的物理分区类型,并选择相应的分区策略:
- 范围分区:获取为表定义的分区列和分区范围,然后按范围复制数据。
- 哈希分区:使用哈希分区键作为分区列,然后根据服务所计算的范围对数据进行分区和复制。
- 轮循分区或无分区:使用主键作为分区列,然后根据服务计算的范围对数据进行分区和复制。
使用自定义查询加载大量数据。 分区选项:动态范围分区。
查询:SELECT * FROM <TABLENAME> WHERE (?AdfHanaDynamicRangePartitionCondition) AND <your_additional_where_clause>。
分区列:指定用于应用动态范围分区的列。

在执行期间,服务首先计算指定分区列的值范围,根据并行复制设置的不同分区列值的数量均匀分布多个存储桶中的行,然后将 ?AdfHanaDynamicRangePartitionCondition替换为筛选每个分区的分区列值范围,并发送到SAP HANA。

如果要使用多个列作为分区列,可以在查询中将每列的值连接为一个列,并将其指定为分区列,如 SELECT * FROM (SELECT *, CONCAT(<KeyColumn1>, <KeyColumn2>) AS PARTITIONCOLUMN FROM <TABLENAME>) WHERE (?AdfHanaDynamicRangePartitionCondition)。

示例:使用表的物理分区进行查询

"source": {
    "type": "SapHanaSource",
    "partitionOption": "PhysicalPartitionsOfTable"
}

示例:使用动态范围分区进行查询

"source": {
    "type": "SapHanaSource",
    "query": "SELECT * FROM <TABLENAME> WHERE (?AdfHanaDynamicRangePartitionCondition) AND <your_additional_where_clause>",
    "partitionOption": "SapHanaDynamicRange",
    "partitionSettings": {
        "partitionColumnName": "<Partition_column_name>"
    }
}

SAP HANA的数据类型映射

从SAP HANA复制数据时,以下映射用于从SAP HANA数据类型映射到服务内部使用的临时数据类型。 若要了解复制活动如何将源架构和数据类型映射到接收器,请参阅架构和数据类型映射。

SAP HANA数据类型 临时服务数据类型
ALPHANUM 字符串
BIGINT Int64
二进制 Byte[]
BINTEXT 字符串
BLOB Byte[]
BOOL 字节
CLOB 字符串
日期 日期时间
十进制 十进制
双精度 双精度
FLOAT 双精度
整数 Int32
NCLOB 字符串
NVARCHAR 字符串
真实 Single
SECONDDATE 日期时间
SHORTTEXT 字符串
SMALLDECIMAL 十进制
SMALLINT Int16
STGEOMETRYTYPE Byte[]
STPOINTTYPE Byte[]
TEXT 字符串
时间 TimeSpan
TINYINT 字节
VARCHAR 字符串
TIMESTAMP 日期时间
VARBINARY Byte[]

SAP HANA接收器

目前不支持SAP HANA连接器作为接收器,而可以将通用 ODBC 连接器与SAP HANA驱动程序配合使用,将数据写入SAP HANA。

按照先决条件设置自托管集成运行时,然后首先安装 SAP HANA ODBC 驱动程序。 创建 ODBC 链接服务以连接到SAP HANA数据存储,如以下示例所示,然后相应地创建包含 ODBC 类型的数据集和复制活动接收器。 若要了解详细信息,请参阅 ODBC 连接器一文。

{
    "name": "SAPHANAViaODBCLinkedService",
    "properties": {
        "type": "Odbc",
        "typeProperties": {
            "connectionString": "Driver={HDBODBC};servernode=<HANA server>:30015",
            "authenticationType": "Basic",
            "userName": "<username>",
            "password": {
                "type": "SecureString",
                "value": "<password>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

查找活动属性

若要了解有关属性的详细信息,请查看 Lookup 活动。

为了获取复制活动支持的数据源和汇集列表,请参阅支持的数据存储。