【问题标题】:Amazon Redshift Error - ERROR: 0A000: Specified types or functions (one per INFO message) not supported on Redshift tablesAmazon Redshift 错误 - 错误:0A000:Redshift 表不支持指定的类型或函数(每条 INFO 消息一个)
【发布时间】:2019-12-11 01:53:00
【问题描述】:

运行以下查询时:

WITH sublevels AS (
SELECT 1 UNION ALL 
SELECT 1 UNION ALL
SELECT 1), FIELDA AS (SELECT (ROW_NUMBER() OVER ())::INT sublevel 
FROM sublevels sl1, sublevels sl2, sublevels sl3)
SELECT TOP 10 
FIELDB, 
sublevel, REPLACE(REGEXP_REPLACE(REGEXP_SUBSTR(UPPER(FIELDC), 'FROM \\S+', 1, sublevel), 'FROM ', ''),')','') ALIASA
FROM TABLEA
JOIN FIELDA ON sublevel <= REGEXP_COUNT(UPPER(FIELDC), 'FROM ')
WHERE ALIASA != 'ABC'
AND lower(split_part(ALIASA, '.', 2)) IN (
SELECT DISTINCT lower(t.table_name)
FROM information_schema.tables t
INNER JOIN information_schema.columns c on c.table_name = t.table_name AND c.table_schema = t.table_schema
WHERE lower(column_name) similar TO '%(aaa|bbb|ccc)%')

我收到以下错误:

错误:0A000:Redshift 表不支持指定的类型或函数(每条 INFO 消息一个)。

我不知道为什么,如果我单独运行查询,它们可以正常工作:

查询1

WITH sublevels AS (
SELECT 1 UNION ALL 
SELECT 1 UNION ALL
SELECT 1), FIELDA AS (SELECT (ROW_NUMBER() OVER ())::INT sublevel 
FROM sublevels sl1, sublevels sl2, sublevels sl3)
SELECT TOP 10 
FIELDB, 
sublevel, REPLACE(REGEXP_REPLACE(REGEXP_SUBSTR(UPPER(FIELDC), 'FROM \\S+', 1, sublevel), 'FROM ', ''),')','') ALIASA
FROM TABLEA
JOIN FIELDA ON sublevel <= REGEXP_COUNT(UPPER(FIELDC), 'FROM ')
WHERE ALIASA != 'ABC'

查询2

SELECT DISTINCT lower(t.table_name)
FROM information_schema.tables t
INNER JOIN information_schema.columns c on c.table_name = t.table_name AND c.table_schema = t.table_schema
WHERE lower(column_name) similar TO '%(aaa|bbb|ccc)%'

【问题讨论】:

  • @a_horse_with_no_name 还是一样的错误

标签: sql amazon-redshift aginity


【解决方案1】:

在红移中:

  1. 针对 information_schema 的查询仅在领导节点上运行
  2. 针对仅在计算节点上运行的任何“正常”表的查询

你不能混合搭配 1. 和 2.

【讨论】:

  • 有没有办法解决这个问题?我可以将information_schema 查询放到一个视图中,然后用结果填充一个新表,然后从主查询中调用它吗?
  • 在 Redshift 中没有办法。你可以使用例如python 或 bash 脚本从表中提取数据并针对 information_schema 构造一个硬编码的动态查询
  • SELECT tbl_rows INTO row_count_user_variable from SVV_TABLE_INFO where schema = current_schema() and "table" = 'test_table';就我而言,在运行上述查询时,我遇到了同样的错误。事实证明 current_schema() 是一个 db 级别的函数,不能在 leader_node 中执行,而其余查询在 leader 节点中运行。谢谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 2018-02-24
  • 1970-01-01
  • 2020-07-27
  • 1970-01-01
相关资源
最近更新 更多