问题标签 [greenplum]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
database - 如何让 Greenplum 4.2.3 只扫描预期的分区?
当我在视图中使用 unnest() 并在 select 语句中使用该视图时,Greenplum 似乎无法仅搜索预期的分区并搜索主表的所有分区。当使用子查询而不是视图时,同样的事情也适用。
例如:
我们目前有 2 个不同的服务器运行 2 个不同版本的 Greenplum。服务器 A 在旧版本 (4.2.1) 上运行,而服务器 B 在 4.2.3 上运行。运行上面相同的查询会产生不同的结果。服务器 A(旧)将在几秒钟内返回查询,而服务器 B(新)将永远返回。运行查询的解释表明服务器 A 仅对其中一个分区进行扫描(在 where 子句中包含日期和状态),而服务器 B 将对每个分区进行扫描,从而导致运行缓慢。
两个 DB 的表结构相同。运行没有嵌套的查询不会有问题。所以,我怀疑与新版本有关。我能做些什么来解决这个问题吗?
database - 在 Greenplum DB [大数据] 上选择分区策略的更好实践
我需要知道是否有人有任何一般准则(除了反复试验),用于为 Greenplum 中的一系列查询类型定义最佳分区/索引的良好策略?
Greenplum 对他们的管理指南有一些建议......但事实是,它几乎是来自 postgres 文档的复制粘贴,虽然其中一些建议似乎很明显(IE:当表太大而无法放入内存时进行分区),它是仅仅定义一个好的策略来实现这一点还不够。
通常 Greenplum 数据库有非常大的表(超过数百 GB),虽然专门为这种用途选择了硬件,但大多数时候我在涉及到非常大的数据库时遇到了麻烦(IE:曾经有一个数据库有 60 个字段的表和超过 2 亿行,每天增加 4-8 百万个注册表)。
我知道选择合适的分区有一些技巧,比如选择可预测的范围,这些范围将以几乎相等的大小分隔(如日期范围)。但还有一个事实是,当我尝试依赖索引的任何其他数据库时,Greenplum 通过给予某些设置更大的权重来完全阻止它们,比如它的随机页面成本,因此根本不使用索引。
但是我读过一些完全适得其反的情况:假设您有三个节点,每个节点 64GB 内存,根据 GP,您不应该分区,直到表超过 192,但由于未使用索引,您最终会seq 每个节点最多可扫描 64gb!--- 虽然这仍然可以很快,但如果你强制使用索引,你可以从 20 多秒减少到几毫秒。
另一个已知情况是,在分区时,开销使查询比应有的速度慢很多。
那么,回到最初的问题:
是否有人对如何定义分区/索引策略有任何好的、坚定的建议?
使用我们的一些 ETL,来自源的测试查询可能需要半小时到一整小时,因此跟踪和错误确实会降低生产力。
谢谢。
unicode - PostgreSQL 对 Unicode 字符串按错误分组?
我发生了一件非常奇怪的事情,我注意到如果 agroup by (word)
是 UTF-8 字符串,它并不总是按单词分组。在同一个查询中,我得到了正确分组的情况,以及没有正确分组的情况。我想知道是否有人知道这是怎么回事?
请注意,以下解决方法可以正常工作:
版本为x86_64-unknown-linux-gnu上的PostgreSQL 8.2.14(Greenplum Database 4.0.4.0 build 3 Single-Node Edition),由GCC gcc.exe(GCC)4.1.1编译,编译于2010年11月30日17:20: 26.
源表:tmpwl
:
sql - 在 PostgreSQL 中查找给定月份的最后一个工作日
在 PostgreSQL 中查找给定月份的最后一个工作日
用法:如果月末在星期六或星期日,则返回上一个星期五,否则使用月末
例子:
- 2013 年 3 月 31 日是星期天,所以返回 2013 年 3 月 29 日
- 2013 年 11 月 30 日是星期六,所以返回 2013 年 11 月 29 日
如何在 PostgreSQL SQL 中编写这个?
到目前为止,我所拥有的是(仅返回月末,但是当它们落在星期六或星期日时,月末不存在):
谢谢
postgresql - 大数据集上的空间连接查询优化
我有一个用例,其中两组数据与一个昂贵的空间谓词相连。为了使查询并行化,我将空间宇宙划分为瓦片(以数千为单位),这样只有属于同一瓦片的记录才需要使用空间谓词进行测试。查询如下:
理想情况下,查询计划应该根据 对记录进行散列,然后使用索引扫描连接或嵌套循环连接tilename
执行空间谓词检查。ST_Intersects
但是,我现在得到的是一个过早执行空间连接的次优计划。该计划如下图所示:
所以,我的问题是:如何强制查询优化器生成更好的计划(这基本上改变了连接顺序)?
sql-server-2008 - 将数据从 SQL Server 数据库推送到 Greenplum 数据库的最有效方法是什么?
Greenplum 数据库版本:PostgreSQL 8.2.15(Greenplum 数据库 4.2.3.0 build 1)
SQL Server 数据库版本:Microsoft SQL Server 2008 R2 (SP1)
我们目前的做法:
1) 将每个表从 SQL Server 导出到平面文件
2) 使用 PSQL 控制台的 psql.exe 实用程序使用 pgAdmin III 将数据加载到 Greenplum
好处...
速度:好的,但是有什么更快的吗?我们在几分钟内加载数百万行数据
自动化:好的,我们使用 VB 中的 Shell 脚本从 SSIS 包中调用此实用程序
陷阱...
可靠性:ETL 依赖于文件服务器来保存平面文件
安全性:文件服务器上有很多潜在的敏感数据
错误处理:这是一个问题。psql.exe 永远不会引发我们可以捕获的错误,即使它确实出错并且不加载任何数据或部分文件
我们还尝试了什么...
.Net Providers\Odbc Data Provider:我们使用 DataDirect 6.0 Greenplum Wire Protocol 配置了系统 DSN。DELETE 的良好性能。插入的狗太慢了。
作为参考,这是前面提到的 SSIS 中的 VB 脚本...
这是“load_MyTable.sql”文件的内容...
java - 处理 Greenplum 外部表中的换行符
我正在创建 Greenplum 外部表并用我的地图中的数据填充它,减少 hdfs 中存在的输出文件。我能够将外部表连接到 HDFS 并访问这些目录中存在的所有文件。所有文件都有逗号分隔格式的值。
例如,我有两个文件 Employee 和 Student 有逗号作为分隔符:
员工:
学生:
所以现在当我为员工文件创建一个外部表时,它可以正常工作。因此,对于 Employee 文件中的每一行,都会在外部表中创建一行。(分隔符是逗号)。
但是当我尝试为学生文件创建外部表时,它会出错。因为描述列具有包含 NEWLINE 字符馈送的值。因此,每当外部表遇到新的换行符时,它都会将其视为记录的结尾,并开始将每个换行符之后的值视为新记录。
我已经尝试过的事情:
- 将上述描述值放入双引号中,将其视为完整的字符串。但它没有成功。
- 从 map reduce 本身的数据中删除换行符提要,但这使我的数据不可读。所以不是一个选择。
谁能建议我如何处理这个问题。提前致谢。
postgresql - greenplum 中的 gpload 实用程序
任何人都可以帮助我使用 greenplum 中的gpload实用程序吗?我是第一次这样做,我已经根据帮助命令创建了控制文件,但是遇到了一些gpfdist连接错误。是否有关于gpload实用程序的参考资料或我可以参考的一些示例?
使用 gpload 时出现以下错误:
我尝试进行一些更改,但问题仍然存在。在此先感谢,阳光
postgresql - 在 Greenplum 上分块执行查询
我正在尝试创建一种将批量日期查询转换为增量查询的方法。例如,如果查询的 where 条件指定为
如果今天执行,这将获取一年的数据。现在,如果明天执行相同的查询,将再次获取 365 天的数据。但是,我已经拥有上一次运行的最后 364 天数据。我只想获取一天的数据,并从系统中删除一天的数据,这样我就可以得到性能更好的 365 天数据。此数据将存储在单独的临时表中。
为此,我创建了一个增量查询,它将在下次运行时执行。但是,当“日期”列不在 SELECT 子句中但在 WHERE 条件中出现时,删除单个日期数据被证明是棘手的,因为临时表架构将没有“日期”列。
所以我想到了分块执行批量查询并为该块分配一个ID。这样,我可以删除一个块并添加一个块,其他数据不受影响。
有没有办法在 postgres 或 greenplum 中实现相同的目标?就像一些内置功能一样。我浏览了整个文档,但找不到任何文档。
另外,如果没有,是否有更好的解决方案来解决这个问题。
postgresql - Greenplum 数据库没有动态扩展到我们的 Linux 系统
这种情况下的主要困难是 Greenplum 数据库的磁盘空间不足错误。我们在 Amazon Linux 机器上运行 Greenplum 数据库 4.2.0.0。
调查显示如下:
1) Greenplum 说我们的空间不足。我们运行 gp_disk_free 命令并得到以下结果。
每行是数据库上的一个段,sdw1 和 sdw2 是主机,/dev/md* 是它说数据库所在的设备。这些数字是数据库中剩余的字节数。又名,几兆字节。
2)我们用 df -h 查看我们的 Linux 系统,得到以下信息:
我们的结论是我们有足够的空间供数据库占用,但是我们无法弄清楚如何配置 Greenplum 来动态执行此操作,甚至无法弄清楚如何增加它的大小以占用 Linux 机器上的更多文件系统空间。
我们已经研究了 gpexpand 命令,它似乎只在您添加新主机和硬件时才有效,考虑到我们在 Linux 机器上有多少空间,我们不需要这样做。
我们还通过增加 max_fsm_pages 和 max_fsm_relations 参数来增加可用空间映射,但在运行 Vacuum 命令后这对释放空间几乎没有作用。我们不知道下一步该做什么。
关于如何在 Linux 机器上增加 Greenplum 数据库的磁盘大小的任何想法?