【问题标题】:What is the best way to ingest data from Terdata into Hadoop with Informatica?使用 Informatica 将数据从 Teradata 摄取到 Hadoop 的最佳方法是什么?
【发布时间】:2017-12-08 04:46:52
【问题描述】:

通过并行数据移动将数据从 Teradata 数据库并行摄取到 Hadoop 中的最佳方法是什么?

  • 如果我们创建一个简单的作业,打开一个与 Teradata 数据库的会话,加载巨大的表将花费大量时间。
  • 如果我们创建一组会话来并行加载数据,并在每个会话中进行 Select,那么它将进行一组全表扫描 Teradata 以生成数据

在并行流中加载数据并对 Teradata 产生不必要的工作负载时,推荐的最佳做法是什么?

【问题讨论】:

    标签: hadoop teradata informatica informatica-powercenter bigdata


    【解决方案1】:

    如果 Tera 数据支持像 oracle 这样的表分区,您可以尝试根据分区点读取表,这将启用并行读取...

    您的其他选择是将表拆分为多个分区,例如在索引列上添加 where 子句。这将确保索引扫描,您可以避免全表扫描。

    【讨论】:

    • 是的,Teradata 支持分区,据我了解,您建议我们需要创建一组 SELECT,每个 SELECT 都有其唯一的列值范围,用于对 Teradata 内部的表进行分区?但是 Informatica 如何知道如何为不同部分创建 WHERE 谓词且不相交范围?第二 - 通过一堆选择来保持表的一致性如何,而其他一些活动会改变这个表?不同的SELECTS会读出同一张表的不同版本。
    • 如果您在 select 子句中使用分区名称,Power Center 只选择该分区内的行,因此不会重复读取。
    【解决方案2】:

    如果您在 select 子句中使用分区名称,Power Center 将仅选择该分区内的行,因此不会出现重复读取(不要忘记在 Informatica 会话级别选择数据库分区)。但是,如果您使用键范围分区,则必须选择设置中提到的范围。通常我们使用 NTILE oracle 分析函数将表拆分为多个部分,以便读取在选择中是唯一的。如果您有任何问题,请告诉我。如果表中有范围/自动生成/代理键列,请在 where 子句中使用它 - 编写子查询将表分成多个部分。

    【讨论】:

      【解决方案3】:

      将数据提取到 Hadoop 形式 teradata 的最具可扩展性的方法是使用 Teradata 连接器 for hadoop。它包含在 Cloudera 和 Hortonworks 发行版中。我将展示基于 Cloudera 文档的示例,但同样适用于 Hortonworks:

      Informatica 大数据版通过命令行使用标准 Scoop 调用并向其提交一组参数。所以主要问题是 - 使用哪个驱动程序在两个 MPP 系统之间建立并行连接。

      这里是 Cloudera 文档的链接: Using the Cloudera Connector Powered by Teradata

      这是本文档的摘要(您会发现此连接器支持不同类型的连接之间的负载平衡):

      由 Teradata 提供支持的 Cloudera 连接器支持以下将数据从 Teradata 导入 Hadoop 的方法:

      • 拆分.by.amp
        • 按值分割
        • split.by.partition
        • split.by.hash
        • split.by.amp 方法

      此最佳方法从 Teradata 检索数据。连接器为每个可用的 Teradata AMP 创建一个映射器,每个映射器随后从每个 AMP 检索数据。因此,不需要临时表。此方法需要 Teradata 14.10 或更高版本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-11
        • 1970-01-01
        • 2020-05-05
        • 2020-01-16
        • 1970-01-01
        • 2017-06-24
        • 1970-01-01
        相关资源
        最近更新 更多