为啥外部表在 netezza 中不起作用?

Posted

技术标签:

【中文标题】为啥外部表在 netezza 中不起作用?【英文标题】:why external tables do not work in netezza?为什么外部表在 netezza 中不起作用? 【发布时间】:2016-06-17 15:50:42 【问题描述】:

我正在服务器 A 上使用 Netezza 模拟器。我在外部表上运行查询时遇到问题。

我在服务器 B 上有一个名为 test.txt 的文本文件。我有带有以下版本参数的 Netezza odbc 连接器:

    Driver version          : 'Release 7.2.0.0 [Build 40845]'
    NPS version             : '07.02.0001 Release 7.2.1.0 [Build 46322]'
    Database                : <sanitized>

当我尝试在服务器 B 上运行此查询时:

CREATE EXTERNAL TABLE testtable (   COL1 INTEGER ) USING (  DATAOBJECT('/var/tmp/test.txt')     DELIMITER 30    NULLVALUE 'N'   ESCAPECHAR '\'  TIMESTYLE '24HOUR'  BOOLSTYLE 'T_F'     CTRLCHARS TRUE  LOGDIR '/data/data/HAGDEMO/temp/'   Y2BASE 2000     ENCODING 'INTERNAL'     REMOTESOURCE 'ODBC' );

每次都有响应。 但是,如果我执行查询:

SELECT * FROM testtable;

它有 50% 的时间有效。前 50% 是正常的。其他 50% 导致挂起。没有错误,没有响应,甚至没有返回游标。只是一个挂起。

在跟踪 pg.log 文件时,我没有发现任何错误。或任何会显示问题的东西。它会确认查询并继续这一天,就好像该喝啤酒一样。

有什么我应该做的吗?这是初始管理员登录,所以我知道所有权限都在那里。

我错过了什么? 谢谢

更新#1: 运行查询时,查询会正常显示在会话管理器中,然后挂起。当我将查询升级到关键状态时,它会立即执行。这是什么原因?我不想每次都手动更新 odbc 的优先级。谢谢。

【问题讨论】:

您的查询可能会受到工作负载管理/GRA 限制的影响。当您的查询似乎挂起时,检查 nzadmin->active 查询中的状态,或从 _v_qrystat 中选择 * - 并查找 state_text。它是挂起、运行还是排队? 谢谢斯科特。他们说“跑步” 另一个问题。您从什么工具和操作系统运行查询?我了解到您已经安装了 netezza 客户端代码并以某种形式使用 odbc,但更具体地说,您使用的是命令行界面还是其他工具? 我正在通过 linux 上的 odbc 从 datastage 运行查询。我正在使用 netezza 管理员来监视会话。此外,这个问题主要在我对外部表运行查询时得到解决。 您提到可以访问 pg.log,那么当您有一个挂起的查询时,您是否也可以尝试运行“nzsqa schedqueues -sys”?运行它几次,寻找你的 planid,看看它是否在 RUNNING 部分,然后查看 age:snip/plan/nullio 的值,看看这三个值中的任何一个是否随着它挂起的时间而增加。 【参考方案1】:

您的问题是,默认情况下,外部表应该从主机(服务器 A)可见。

除非 /var/tmp/test.txt 从主机可见,否则如果不指定 RemoteSource ODBC 选项,它将无法工作,即使那样,客户端提交选择 SQL 也必须在服务器 B 上运行(即,它也必须能够看到 /var/tmp/test.txt)。

要测试/证明这一点,请将文件移动到服务器 A 上的 /var/tmp 并重试。达达!不客气.....

【讨论】:

以上是关于为啥外部表在 netezza 中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 BIGINT/INT 在 Netezza 中不起作用

SQL-创建表在 SQL Server Management Studio SSMS 中不起作用

雪花 ...Alter 表在雪花中的托管模式中不起作用

在 dijit.form.ContentPane 中使用表在 Internet Explorer 7 中不起作用

单个接口控制器中的两个表在 WatchKit 中不起作用

为啥 setVisibility() 在 onResumeFragments() 中不起作用?