编辑:请指出其他人是否没有看到这个问题,我做错了什么.
我试图通过VerticaDayTimeInterval构造函数向包含单个VerticaDayTimeInterval列的表添加行.不管我之前给出的是什么,精度和小数值都被错误地打印并且检索所有6的精度.
dayInt = new VerticaDayTimeInterval(10, 10, 01, 8, 2, 1, false) ; ((VerticaPreparedStatement) pstmt).setObject(1, dayInt) ; pstmt.addBatch() ; System.out.println(dayInt.toString());
dayInt = new VerticaDayTimeInterval(10, 10, 02, 7, 3, 2, false) ; ((VerticaPreparedStatement) pstmt).setObject(1, dayInt) ; pstmt.addBatch() ; System.out.println(dayInt.toString());
dayInt = new VerticaDayTimeInterval(10, 10, 03, 6, 43, 3, false) ; ((VerticaPreparedStatement) pstmt).setObject(1, dayInt) ; pstmt.addBatch() ; System.out.println(dayInt.toString());
Run Code Online (Sandbox Code Playgroud)
表输出
DayInt
-------------------
10 10:03:49.000211
11 07:00:00.0002
9 09:09:05.000005
(3 rows)
Run Code Online (Sandbox Code Playgroud)
使用结果集重新打印和打印行.
for (int x=1 ; rs.next() ; ++x) {
VerticaDayTimeInterval dti = (VerticaDayTimeInterval)(rs.getObject(1)); …
Run Code Online (Sandbox Code Playgroud) 我正在调整网络分析工具以Vertica
用作数据库.我遇到了真正的问题optimizing joins
.我尝试为我的一些查询创建预连接投影,虽然它确实使查询快速,但它减慢了数据加载到事实表中的速度.
INSERT INTO ... SELECT * FROM
我们用来从临时表中将数据加载到事实表中的一个简单过程需要大约5秒钟才能完成20多分钟.
因此,我删除了所有预连接投影,并尝试使用Database Designer设计查询特定的投影,但这还不够.即使使用这些投影,简单的连接也需要大约14秒,这需要约1秒的预连接投影.
我的问题是:预连接预测是否正常减慢数据插入这一点,如果不是,那可能是罪魁祸首?如果这是正常的,那么它对我们来说是一个显示阻止,是否有其他技术可以用来加速连接?
我们在5节点集群上运行Vertica,每个节点具有2 x四核CPU和32 GB内存.我的示例查询中的表分别有188,843,085和25,712,878行.
EXPLAIN输出如下所示:
EXPLAIN SELECT referer_via_.url as referralPageUrl, COUNT(DISTINCT sessio
n.id) as visits FROM owa_session as session JOIN owa_referer AS referer_vi
a_ ON session.referer_id = referer_via_.id WHERE session.yyyymmdd BETWEEN
'20121123' AND '20121123' AND session.site_id = '49' GROUP BY referer_via_
.url ORDER BY visits DESC LIMIT 250;
Access Path:
+-SELECT LIMIT 250 [Cost: 1M, Rows: 250 (STALE STATISTICS)] (PATH ID: 0)
| Output Only: …
Run Code Online (Sandbox Code Playgroud) 有什么办法可以存储最后一次迭代的行结果并将其用于下一行迭代吗?
例如,我有一个表说(Time_Table
).
__ Key type timeStamp
1 ) 1 B 2015-06-28 09:00:00
2 ) 1 B 2015-06-28 10:00:00
3 ) 1 C 2015-06-28 11:00:00
4 ) 1 A 2015-06-28 12:00:00
5 ) 1 B 2015-06-28 13:00:00
Run Code Online (Sandbox Code Playgroud)
现在假设我有exceptionTime
90分钟不变.如果我开始检查我的Time_Table
话:
对于第一行,因为在09:00:00,
它之前没有行将直接将此记录放入我的目标表中.现在我的参考点是9:00:00.
对于10:00:00,
最后一个参考点的第二行是09:00:00
和TIMESTAMPDIFF(s,09:00:00,10:00:00)
60,它小于所需的90.我不将此行添加到我的目标表.
对于第三行,最后记录的异常是at,09:00:00
并且TIMESTAMPDIFF(s,09:00:00,11:00:00)
120是大于所需的90,因此我选择此记录并将参考点设置为11:00:00
.
对于第四排TIMESTAMPDIFF(s,11:00:00,12:00:00)
.同样,它不会被保存.
这个又被保存了.
目标表
__ Key type timeStamp
1 ) 1 B 2015-06-28 09:00:00
2 ) 1 C 2015-06-28 …
Run Code Online (Sandbox Code Playgroud) 我目前正在与MongoDB和Apache Cassandra分别开展一些项目.我也在使用Solr,我正在使用它们处理"大量"数据(大约1-2TB).我上周第一次听说过Greenplum和Vertica,我不太确定,把它们放在我的大脑里.他们在我看来像Dataware House(DWH)解决方案,我还没有真正使用过DWH.而且他们似乎要花很多钱(例如Greenplum的1TB存储费用为6万美元).我目前没有处理Petabyte的数据,我想不会这样做,但像cassandra这样的产品似乎也能够处理这个
Cassandra是公认的NoSQL领导者,可以轻松扩展到太字节或数PB的数据.
所以我的问题是:人们为什么要使用Greenplum&Co?与其他产品相比,是否有巨大的优势?
谢谢.
您好我已经在Ubuntu 10.10 32位版本机器中配置了vertica的DSN设置.设置都很好,我已经交叉检查了它们.
这是我的odbc.ini文件:
[VerticaDSN]
Description = VerticaDSN ODBC driver
Driver = /opt/vertica/lib/libverticaodbc_unixodbc.so
Servername = myservername
Database = mydbname
Port = 5433
UserName = myuname
Password = *******
Locale = en_US
Run Code Online (Sandbox Code Playgroud)
同样我有一个odbcinst.ini文件.
当我运行命令时:isql -v VerticaDSN我收到以下错误:
[S1000][unixODBC][DSI] The error message NoSQLGetPrivateProfileString could not be found in the en-US locale. Check that /en-US/ODBCMessages.xml exists.
[ISQL]ERROR: Could not SQLConnect.
Run Code Online (Sandbox Code Playgroud)
我已经尝试了一切,但我无法破译这个错误.
任何帮助将不胜感激.
有人知道在Vertica中搜索column_names的方便功能吗?从文档中,似乎\ d只查询table_names.我正在寻找像MySQL的information_schema.columns这样的东西,但找不到有关类似的元数据表的任何信息.
谢谢!
我正在使用以下内容:
DRIVER={Vertica ODBC Driver 4.1};
SERVER=lnxtabdb01.xxxx.com;
PORT=5433;
DATABASE=vertica;
USER=dbadmin;
PASSWORD=vertica;
OPTION=3;
Run Code Online (Sandbox Code Playgroud)
我收到此错误,我只想在检查其他可能的问题之前确保我的连接字符串很酷.
错误:
EnvironmentError: System.Data.Odbc.OdbcException (0x80131937): ERROR [28000] FATAL: no Vertica user name specified in startup packet
Run Code Online (Sandbox Code Playgroud)
更新:目前我只是在Windows Vista中使用我可以使用的系统数据源名称.但是我仍然想知道是否有odbc连接字符串,这样我就不必在每台将以这种方式连接到Vertica DB的机器上进行设置.
好吧,我尝试了一个postgresql连接字符串,如下所示:
Host=lnxtabdb01.xxxx.com;
Port=5433;
Database=vertica;
User ID=dbadmin;
Password=vertica;
Pooling=true;
OPTION=3;
Min Pool Size=0;
Max Pool Size=100;
Connection Lifetime=0;
Run Code Online (Sandbox Code Playgroud)
现在我得到这个:
EnvironmentError: System.Data.Odbc.OdbcException (0x80131937): ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
Run Code Online (Sandbox Code Playgroud) 我有一个带有时间序列数据的表S,如下所示:
key day delta
Run Code Online (Sandbox Code Playgroud)
对于给定的密钥,它可能但不太可能缺少天数.
我想从delta值(正INT)构造一个累积列,以便将此累积数据插入另一个表中.这是我到目前为止所得到的:
SELECT key, day,
SUM(delta) OVER (PARTITION BY key ORDER BY day asc RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
delta
FROM S
Run Code Online (Sandbox Code Playgroud)
在我的SQL风格中,默认窗口子句是在UNBOUNDED PRECEDING和CURRENT ROW之间的范围,但我把它留在那里是明确的.
这个查询非常慢,比旧的破解查询慢了几个数量级,这个查询为累计计数填充了0.有关生成累积数字的其他方法的建议吗?
我确实在这里查看解决方案: 按表中的分组记录运行总计
我正在使用的RDBM是Vertica.Vertica SQL排除了那里的第一个subselect解决方案,它的查询规划器预测第二个左外连接解决方案的成本比我上面显示的分析形式高出约100倍.
我在Vertica上创建了一个表.我想在该表上创建索引.我无法在vertica上创建索引.可能吗?我怎样才能做到这一点?谁能给我一些示例脚本?谢谢.
根据此SQL连接备忘单,一列上的左外连接如下:
SELECT *
FROM a
LEFT JOIN b
ON a.foo = b.foo
WHERE b.foo IS NULL
Run Code Online (Sandbox Code Playgroud)
我想知道在多个列上连接会是什么样子,如果它是一个OR
或AND
在WHERE
子句中?
SELECT *
FROM a
LEFT JOIN b
ON a.foo = b.foo
AND a.bar = b.bar
AND a.ter = b.ter
WHERE b.foo IS NULL
OR b.bar IS NULL
OR b.ter IS NULL
Run Code Online (Sandbox Code Playgroud)
要么
SELECT *
FROM a
LEFT JOIN b
ON a.foo = b.foo
AND a.bar = b.bar
AND a.ter = b.ter
WHERE b.foo IS NULL …
Run Code Online (Sandbox Code Playgroud)