我想用你的智慧为数据仓库系统找到合适的解决方案.以下是一些可以更好地理解问题的细节:
数据以星型模式结构组织,具有一个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)
问题:
哪里可以托管(EC2?)
(请忽略此刻的导入和加载问题)
Tnx,
Haggai.
任何人都知道如何在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子句有这么慢的特殊原因吗?
程
我需要计算表中各种尺寸的百分比.我想通过使用窗口函数来计算分母来简化事情,但是我遇到了问题,因为分子也必须是聚合.
举个简单的例子,请看下表:
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
我目前正在与MongoDB和Apache Cassandra分别开展一些项目.我也在使用Solr,我正在使用它们处理"大量"数据(大约1-2TB).我上周第一次听说过Greenplum和Vertica,我不太确定,把它们放在我的大脑里.他们在我看来像Dataware House(DWH)解决方案,我还没有真正使用过DWH.而且他们似乎要花很多钱(例如Greenplum的1TB存储费用为6万美元).我目前没有处理Petabyte的数据,我想不会这样做,但像cassandra这样的产品似乎也能够处理这个
Cassandra是公认的NoSQL领导者,可以轻松扩展到太字节或数PB的数据.
所以我的问题是:人们为什么要使用Greenplum&Co?与其他产品相比,是否有巨大的优势?
谢谢.
使用Greenplum
而不是PostgreSQL
在webapp(django
)环境中使用和反对的论据是什么?
我的直觉反应是更喜欢PostgreSQL的开源方法和庞大的知识库.
我的配置(虽然我很想听听任何其他配置)是一个中型企业,有2个Web服务器和(目前)2个数据库服务器.
要比较的领域是二进制data crunching
,replication
我个人最喜欢的节点数量:communitiy support
以及熟练的工程师支持.
使用Greenplum而不是PostgreSQL有什么优缺点?
我正在研究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)
所以,请帮帮我.
我尝试了什么
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)
它可以在任何情况下工作.
当我使用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) 是否可以在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) 我想使用一个简单的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部分移动到不同的作业中,但这不是一个优雅的解决方案.
我正在尝试运行以下查询:
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
它会给我一个错误。