标签: greenplum

每月200亿行 - Hbase/Hive/Greenplum /什么?

我想用你的智慧为数据仓库系统找到合适的解决方案.以下是一些可以更好地理解问题的细节:

数据以星型模式结构组织,具有一个BIG事实和~15个维度.
每月20B个事实行
10个维度有100行(有些层次结构)
5个维度有数千行
2个维度有~200K行
2个大尺寸有50M-100M行

针对此DB运行两个典型查询

dimq的热门成员:

select    top X dimq, count(id) 
from      fact 
where     dim1 = x and dim2 = y and dim3 = z 
group by  dimq 
order by  count(id) desc
Run Code Online (Sandbox Code Playgroud)

针对元组的措施:

select    count(distinct dis1), count (distinct dis2), count(dim1), count(dim2),...
from      fact 
where     dim1 = x and dim2 = y and dim3 = z 
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 执行此类查询的最佳平台是什么
  2. 需要什么样的硬件
  3. 哪里可以托管(EC2?)


    (请忽略此刻的导入和加载问题)

Tnx,
Haggai.

database mapreduce data-warehouse vldb greenplum

31
推荐指数
2
解决办法
2万
查看次数

Postgresql中的NOT EXISTS子句

任何人都知道如何在Postgresql中执行此类查询?

SELECT * 
FROM tabA 
WHERE NOT EXISTS (
    SELECT * 
    FROM tabB 
    WHERE tabB.id = tabA.id
)
Run Code Online (Sandbox Code Playgroud)

当我执行这样的查询时,postgresql会抱怨" ERROR: Greenplum Database does not yet support that query."

编辑:这个怎么样:

SELECT * 
FROM tabA 
WHERE NOT EXISTS (
    SELECT * 
    FROM tabB WHERE tabB.id = tabA.id AND tabB.id2 = tabA.id2
)
Run Code Online (Sandbox Code Playgroud)

编辑:
我在postgresql 8.2.15中测试了@ypercube提供的4个答案.结论是:

1)第一个在postgresql版本中不起作用,正如我上面在问题中所说的那样.也可以在那里找到错误消息.

2)对于其他三个答案,执行速度为:(3)LEFT JOIN>(4)EXCEPT >>(2)NOT IN.
具体来说,对于具有相同语法的查询,(3)LEFT JOIN大约需要5580ms,(4)EXCEPT大约需要13502ms,而(2)NOT IN需要大于100000(实际上我没有等待它完成).
NOT IN子句有这么慢的特殊原因吗?

postgresql greenplum

20
推荐指数
2
解决办法
3万
查看次数

如何使用SQL窗口函数计算聚合的百分比

我需要计算表中各种尺寸的百分比.我想通过使用窗口函数来计算分母来简化事情,但是我遇到了问题,因为分子也必须是聚合.

举个简单的例子,请看下表:

create temp table test (d1 text, d2 text, v numeric);
insert into test values ('a','x',5), ('a','y',5), ('a','y',10), ('b','x',20);
Run Code Online (Sandbox Code Playgroud)

如果我只想计算d1中每一行的份额,那么窗口函数可以正常工作:

select d1, d2, v/sum(v) over (partition by d1)
from test;

"b";"x";1.00
"a";"x";0.25
"a";"y";0.25
"a";"y";0.50
Run Code Online (Sandbox Code Playgroud)

但是,我需要做的是计算d1中d2之和的总份额.我正在寻找的输出是这样的:

"b";"x";1.00
"a";"x";0.25
"a";"y";0.75
Run Code Online (Sandbox Code Playgroud)

所以我试试这个:

select d1, d2, sum(v)/sum(v) over (partition by d1)
from test
group by d1, d2;
Run Code Online (Sandbox Code Playgroud)

但是,现在我收到一个错误:

ERROR:  column "test.v" must appear in the GROUP BY clause or be used in an aggregate function
Run Code Online (Sandbox Code Playgroud)

我假设这是因为它抱怨在分组子句中没有考虑窗口函数,但是无论如何窗口函数都不能放在分组子句中.

这是使用Greenplum 4.1,它是Postgresql 8.4的一个分支,并共享相同的窗口函数.请注意,Greenplum无法执行相关子查询.

sql postgresql aggregate-functions window-functions greenplum

14
推荐指数
1
解决办法
1万
查看次数

与MongoDB或Cassandra相比,Greenplum或Vertica等数据库的优势

我目前正在与MongoDBApache Cassandra分别开展一些项目.我也在使用Solr,我正在使用它们处理"大量"数据(大约1-2TB).我上周第一次听说过GreenplumVertica,我不太确定,把它们放在我的大脑里.他们在我看来像Dataware House(DWH)解决方案,我还没有真正使用过DWH.而且他们似乎要花很多钱(例如Greenplum的1TB存储费用为6万美元).我目前没有处理Petabyte的数据,我想不会这样做,但像cassandra这样的产品似乎也能够处理这个

Cassandra是公认的NoSQL领导者,可以轻松扩展到太字节或数PB的数据.

通过http://www.datastax.com/why-cassandra

所以我的问题是:人们为什么要使用Greenplum&Co?与其他产品相比,是否有巨大的优势?

谢谢.

data-warehouse mongodb cassandra vertica greenplum

13
推荐指数
4
解决办法
3万
查看次数

Greenplum vs PostgreSQL

使用Greenplum而不是PostgreSQL在webapp(django)环境中使用和反对的论据是什么?

我的直觉反应是更喜欢PostgreSQL的开源方法和庞大的知识库.

我的配置(虽然我很想听听任何其他配置)是一个中型企业,有2个Web服务器和(目前)2个数据库服务器.

要比较的领域是二进制data crunching,replication我个人最喜欢的节点数量:communitiy support以及熟练的工程师支持.

使用Greenplum而不是PostgreSQL有什么优缺点?

sql database django postgresql greenplum

10
推荐指数
3
解决办法
2万
查看次数

错误:关系不存在,在greenplum数据库上

我正在研究PostgreSQL 8.2.15(Greenplum数据库4.2.0 build 1)(HAWQ 1.2.1.0 build 10335).

我写了一个函数

create or replace function my_function ( 
...
    select exists(select 1 from my_table1 where condition) into result;
Run Code Online (Sandbox Code Playgroud)

我测试了它

select my_function(params);
Run Code Online (Sandbox Code Playgroud)

它可以完全奏效!

这是问题,如果我调用函数就好了

select my_function(params) from my_table2;
Run Code Online (Sandbox Code Playgroud)

Postgres告诉我你错了!

错误:关系"my_table1"不存在(segXX sliceX xx.xx.xx:40003 pid = 570406)

  • 这些表和函数在同一模式中.
  • 我可以访问它们.
  • 这两个名字都是小写的.

所以,请帮帮我.

我尝试了什么

  • 将这些表从my_schema移动到public
  • 将功能转移到公众
  • 添加模式前缀,如my_schema.my_table1.

2015/04/19编辑

Postgre - > Postgres

我尝试过就好了

select my_function(params) from pg_stat_activity;
Run Code Online (Sandbox Code Playgroud)

没关系.

如果编辑那个功能就好

create or replace function my_function ( 
...
    select true into result;
Run Code Online (Sandbox Code Playgroud)

它可以在任何情况下工作.

postgresql greenplum hawq

9
推荐指数
1
解决办法
1025
查看次数

PostgreSQL的rodbc字符编码错误

当我使用RODBC从R连接到GreenPlum PostgreSQL数据库时,我遇到了一个我从未得过的新错误.我使用EMACS/ESS和RStudio得到了错误,并且RODBC调用过去一如既往.

library(RODBC)
gp <- odbcConnect("greenplum", believeNRows = FALSE)
data <- sqlQuery(gp, "select * from mytable")

> data
[1] "22P05 7 ERROR: character 0xc280 of encoding \"UTF8\" has no equivalent in  "WIN1252\";\nError while executing the query" 
[2] "[RODBC] ERROR: Could not SQLExecDirect 'select * from mytable'"
Run Code Online (Sandbox Code Playgroud)

编辑:刚刚尝试查询另一个表,并得到了结果.所以我猜这不是RODBC问题,而是PostgreSQL表编码问题.

R version 2.13.0 (2011-04-13)
Platform: i386-pc-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=English_United States.1252 
[2] LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base …
Run Code Online (Sandbox Code Playgroud)

postgresql r rodbc greenplum

7
推荐指数
1
解决办法
3461
查看次数

postgres中over子句中的where子句

是否可以在overclause中使用where子句,如下所示?

SELECT SUM(amount) OVER(partition by prod_name WHERE dateval > dateval_13week)
Run Code Online (Sandbox Code Playgroud)

因为我的日期不在订单中,所以我不能使用前后内部条款.我需要获取的是当前记录的小于13周日期值的记录.

EDIT : 
sum(CASE WHEN dateval >= dateval_13week and dateval <=current_row_dateval then amount else 0 end) over (partition by prod_name order by week_end desc)
Run Code Online (Sandbox Code Playgroud)

简单来说,早些时候,当我在序列中包含所有日期时,我使用以下查询对记录进行分区.现在我按随机顺序排列日期,并且有一些缺少日期.

sum(amount) over 
        (partition by prod_name order by prod_name,week_end desc rows between 0 preceding and 12 following)
Run Code Online (Sandbox Code Playgroud)

sql postgresql partitioning greenplum

7
推荐指数
2
解决办法
4305
查看次数

Talend greenplumRow错误处理

我想使用一个简单的talend作业在greenplum HAWQ中创建视图,它基本上有一个fileinput包含我需要执行CREATE VIEW脚本的所有视图.

由于这些视图(50-60.000)来自oracle系统,我需要找到我们无法创建的视图.

这是我的问题的模拟: 在此输入图像描述

我已经在数据库中有了一个视图,我想再创建它3次.这显然会失败.

这是输出:

Exception in component tGreenplumRow_2
org.postgresql.util.PSQLException: ERROR: relation "ad_apps_dependencies" already exists
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1592)
.--------------.
|  tLogRow_4   |
|=------------=|
|componenterror|
|=------------=|
|componenterror|
'--------------'

.-----------------------------------------------------+-------------------------------------------------------------.
|                                                                                  tLogRow_5                        |
|=----------------------------------------------------+------------------------------------------------------------=|
|result                                               |result1                                                      |
|=----------------------------------------------------+------------------------------------------------------------=|
|ERROR: relation "ad_apps_dependencies" already exists|CREATE VIEW SYSTEM.AD_APPS   AS SELECT * FROM APPLSYS.AD_APPS|
'-----------------------------------------------------+-------------------------------------------------------------'

.------------.
| tLogRow_6  |
|=----------=|
|subjobError |
|=----------=|
|Subjob Error|
'------------'
Run Code Online (Sandbox Code Playgroud)

我希望这个输出有3次,因为我尝试运行3次查询.(在最终版本中,我将创建另一个仅包含失败查询的文件,因此我们稍后可以修复它,但这是关键点.)

作为一种解决方法:我可以将此tRow - > OnError - > FixedFlow - > FailedViews部分移动到不同的作业中,但这不是一个优雅的解决方案.

etl talend greenplum hawq

7
推荐指数
1
解决办法
825
查看次数

LEFt JOIN LATERAL 显示 SELECT 错误

我正在尝试运行以下查询:

SELECT
tc.ID_NUMBER AS AFC_RPP_Number,
hc.BUSINESS AS Business,
hc.DIRECTOR AS Director,
tc.REASON_FOR_REVISION AS Description_of_Change
FROM alo_gg.AWS_PIM tc
left join lateral(
    select BUSINESS,DIRECTOR                
    FROM alo_ggg.tracker
    WHERE START_DATE <= tc.DATE AND  SO = tc.SO 
    ORDER BY START_DATE DESC 
    LIMIT 1
) hc;
Run Code Online (Sandbox Code Playgroud)

上面的查询显示错误:

ERROR:  syntax error at or near "SELECT"
left join lateral (SELECT BUSINESS,DIRECTOR...
Run Code Online (Sandbox Code Playgroud)

如果我单独运行子查询,它会给我一个结果,但lateral它会给我一个错误。

sql greenplum lateral-join

6
推荐指数
1
解决办法
6990
查看次数