Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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
Sql 以绿梅花的形式分发通知_Sql_Greenplum - Fatal编程技术网

Sql 以绿梅花的形式分发通知

Sql 以绿梅花的形式分发通知,sql,greenplum,Sql,Greenplum,假设我在psql上运行以下查询: > select a.c1, b.c2 into temp_table from db.A as a inner join db.B as b > on a.x = b.x limit 10; 我得到以下信息: 注意:表没有'DISTRIBUTED BY'子句——使用 名为“c1”的列作为Greenplum数据库数据分发键 用于此表。 提示:“DISTRIBUTED BY”子句确定 数据的分发。确保选择的列是最佳的 数据分布键,以最大限度地减少倾

假设我在psql上运行以下查询:

> select a.c1, b.c2 into temp_table from db.A as a inner join db.B as b 
> on a.x = b.x limit 10;
我得到以下信息:

注意:表没有'DISTRIBUTED BY'子句——使用 名为“c1”的列作为Greenplum数据库数据分发键 用于此表。
提示:“DISTRIBUTED BY”子句确定 数据的分发。确保选择的列是最佳的 数据分布键,以最大限度地减少倾斜

  • 什么是由列分发的
    
    
  • temp_table
    存储在哪里?它存储在我的客户端还是服务器上

  • 对于第一个问题,
    distributed BY
    子句用于告诉数据库服务器如何将数据库存储在磁盘上。()

    我确实马上看到了一件事,那就是Join子句的语法可能有误,即a.x=s.x上没有被引用为s的表。也许您的问题很简单,只要在a.x=b.x上将其更改为

    至于临时表的存储位置,我相信它通常存储在数据库服务器上。这将是DBA的一个问题,因为它是安装数据库时的一个设置项。如果要保存结果(无需打印),您可以随时将数据转储到计算机上的文件中,并在以后重新加载

  • DISTRIBUTED BY是Greenplum确定存储每行的段的方式。因为Greenplum是大多数生产数据库中的MPP数据库,所以您将拥有多个段服务器。您希望确保分发列是您将在usaly上加入的列

  • temp_表是将在Greenplum集群上为您创建的表。如果您没有将search_path设置为其他内容,它将位于公共架构中


  • 据我所知,tmp表存储在内存中。数据较少时速度更快,建议使用临时表。相反,由于临时表存储到内存中,如果数据太多,它将消耗非常大的内存。建议使用带有distributed子句的常规表。因为它将分布在您的集群中


    此外,tmp表存储在一个特殊的模式中,因此在创建临时表时不需要指定模式名称,并且在关闭当前连接后,它只存在于当前连接中,postgresql将自动删除该表。

    Greenplum数据库是Postgres的分支,由
    分发的
    确实存在于Postgres中。谢谢@IgorRomanchenko-您知道
    临时表
    存储在哪里吗?它会保存在我的客户机内存中吗?在服务器中?作为一个表是否比csv文件占用更少的内存空间?我不太了解Greenplum,但Postgres(以及我所知道的所有其他数据库)只在服务器端存储它们的表。至于桌子的大小——这要看情况而定。最有可能的是,它将以二进制形式占用更少的空间作为Greenplum表。