【问题标题】:Loading data of one table into another residing on different databases - Netezza将一个表的数据加载到驻留在不同数据库中的另一个表中 - Netezza
【发布时间】:2014-02-26 04:14:49
【问题描述】:

我有一个大文件,我使用 ETL 工具将它加载到 netezza 数据库的表中,我们将此数据库称为 Staging_DB。现在,发布一些验证,该表的内容需要插入到位于另一个 netezza DB 中的类似结构化表中,我们称之为PROD_DB。将数据从staging_DB 传输到PROD_DB 的最快方法是什么?

  1. 我应该使用 ETL 工具将数据加载到PROD_DB 吗?或者,
  2. 是否应使用外部表概念进行传输?

【问题讨论】:

  • 如果在将数据插入 PROD_DB 之前不需要进行任何转换,您绝对应该取消使用 ETL 工具的选项。

标签: netezza


【解决方案1】:

如果不需要进行转换,那么更好的传输方式是跨数据库数据传输。如 Netezza 文档中所述,Netezza 支持跨数据库支持,其中用户对两个数据库都具有对象级权限。

您可以使用以下命令检查权限 -

dbname.schemaname(loggenin_username)=> \dpu username

请在下面找到工作示例 -

INSERT INTO Staging_DB..TBL1 SELECT * FROM PROD_DB..TBL1

如果你想做一些转换,然后你需要插入另一个数据库,那么你可以编写 UDT 过程(也称为结果集过程)。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    移动数据的一种方法是使用Transient External Tables。首先从源表/db 创建一个平面文件。因为您是从Netezza 移动到Netezza,所以您可以通过打开压缩和使用internal 格式来节省时间和空间。

    CREATE EXTERNAL TABLE 'C:\FileName.dat'
    USING (
    delim 167
    datestyle 'MDY'
    datedelim '/'
    maxerrors 2
    encoding 'internal'
    Compress True
    REMOTESOURCE 'ODBC'
    logDir 'c:\' )  AS
    SELECT * FROM source_table;
    

    然后使用源中相同的DDL 在目标数据库中创建表并加载它。

    INSERT INTO target SELECT * FROM external  'C:\FileName.dat'
    USING (
    delim 167
    datestyle 'MDY'
    datedelim '/'
    maxerrors 2
    encoding 'internal'
    Compress True
    REMOTESOURCE 'ODBC'
    logDir 'c:\' );
    

    【讨论】:

      【解决方案3】:

      我会在生产数据库上编写一个 SP,并从阶段到生产数据库进行 CTAS。 SP 的美妙之处在于您也可以添加转换。 另一种选择是 Netezza 提供的 NZ migrate 实用程序,这是我认为最快的路线。

      【讨论】:

        【解决方案4】:

        一个简单的 SQL 查询,如

        INSERT INTO Staging_DB..TBL1 SELECT * FROM PROD_DB..TBL1
        

        如果您只需要这样做,效果很好。

        请注意,执行查询时必须连接到目标数据库,否则会收到错误代码

        HY0000:“这种类型的命令不支持跨数据库访问”

        即使您对数据库和表都有读/写访问权限。

        【讨论】:

          【解决方案5】:

          在大多数情况下,您可以使用“设置目录”命令简单地更改目录

          https://www-304.ibm.com/support/knowledgecenter/SSULQD_7.0.3/com.ibm.nz.dbu.doc/r_dbuser_set_catalog.html

          【讨论】:

            【解决方案6】:
            set catalog='database_name';
            insert into target_db.target_schema.target_table select source_db.source_schema.source_table;
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-07-27
              • 1970-01-01
              • 2020-07-10
              • 1970-01-01
              • 2019-08-30
              • 1970-01-01
              相关资源
              最近更新 更多