Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 无法将信息架构从红移卸载到S3_Amazon Web Services_Amazon S3_Amazon Redshift - Fatal编程技术网

Amazon web services 无法将信息架构从红移卸载到S3

Amazon web services 无法将信息架构从红移卸载到S3,amazon-web-services,amazon-s3,amazon-redshift,Amazon Web Services,Amazon S3,Amazon Redshift,有没有办法将信息模式从红移卸载到S3? 尝试卸载信息架构时出现以下错误 错误:红移表不支持指定的类型或函数(每个信息消息一个) 以下是我用于卸载的查询: UNLOAD ('select table_schema, table_name from information_schema.tables where table_schema not in (\'information_schema\', \'pg_catalog\') and table_type = \'BASE

有没有办法将信息模式从红移卸载到S3? 尝试卸载信息架构时出现以下错误

错误:红移表不支持指定的类型或函数(每个信息消息一个)

以下是我用于卸载的查询:

UNLOAD ('select table_schema,
      table_name
from information_schema.tables
where table_schema not in (\'information_schema\', \'pg_catalog\')
     and table_type = \'BASE TABLE\'
order by table_schema,
        table_name;')
TO 's3://xxx/'
iam_role 'arn:aws:iam::xxx';

我知道你有两个选择

  • 您可以从查询中删除数据类型在工作节点上不受支持的列(即,仅为leader节点),这是导致出现错误的原因。(我不熟悉
    information\u schema
    视图,因为我从不使用它们——我使用本机表/视图——但视图中可能也会调用一些函数,这些函数只是leader节点,您将无法删除它们,因为它们是视图SQL的一部分;只要在那里,查询规划器就会拒绝查询运行)

  • 您可以使用Redshift外部的东西,例如计算机上的Python,连接到Redshift并发出查询。然后,您将能够检索所有数据类型,然后在Python代码中将它们发送到S3


  • 顺便说一句,系统表中的许多
    char
    列都包含UTF-8。如果
    UNLOAD
    它们,您将无法使用
    COPY
    将这些文件加载到原始表的空副本中,因为
    COPY
    会注意到您正在加载非ASCII值。您需要将有问题的
    char
    列(其中大多数)的数据类型更改为
    varchar

    当leader节点只需要将数据发送到计算节点,并且在查询过程中没有数据向该方向流动的路径时,通常会生成此错误消息。通常在尝试将某些系统表与用户数据联接时发生。现在,我从来没有像您那样生成过这个错误,但我希望这是正在发生的事情,因为卸载在所有计算节点中并行工作

    如果您将UNLOAD更改为PARALLEL OFF,这将通过leader节点将数据写入S3,那么这可能会起作用。由于数据不必进入计算节点,因此可以让您通过此错误


    如果没有,则可以将这些系统表中的数据选择到游标中,然后将游标读取到临时表中。然后可以卸载临时表。如果需要,我可以为您指出一个执行此操作的流程。

    这非常有趣(并行注销仅来自leader节点)。谢谢请记住,这也可能是一种反模式。过多的卸载数据流经leader节点可能会显著影响leader节点的性能,并影响其其他重要功能(查询编译和结果传递)。我更多地考虑了仅处理leader节点数据类型的情况。事实上,您无法招募工作节点,因此您不会失去本来可以获得的性能,但对于无法使用卸载或插入的系统表,实际上必须让外部实体发出选择、捕获行并发出插入,这从表面上看可以解决该问题。话虽如此,我想知道ACLitem[]会产生什么样的副本。假定字符串表示法(SELECTT接收的)COPY总是将数据读入计算节点,不支持非计算节点数据类型。每当计算节点上需要仅指引线的表数据时,即使数据类型受支持,也会产生此错误。如果您需要从这些表中插入,则需要卸载并复制或选择光标,然后将光标读入另一个表。对不起,这是一个语法错误。当我打算写
    UNLOAD
    时,我写了
    COPY