我需要加载pig中某个分区(日期)的数据。此数据是在配置单元中创建的,并按日期进行分区。所以我想通过hcatalog在pig中加载数据。
hcatalog文档说,要在pig中加载某个分区,首先加载整个数据集,然后对其进行过滤,即:
a = load 'web_logs' using org.apache.hcatalog.pig.HCatLoader();
b = filter a by datestamp > '20110924';
https://cwiki.apache.org/confluence/display/hive/hcatalog+loadstore 但我担心这首先会将整个数据加载到包a中,然后只将其过滤到包b中。我说的对吗?
在hive this works(无hcat)中,您可以修剪数据以获得所需的分区,即:
LOAD DATA INPATH 'filepath' INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
用hcatalog在pig中这个构造的等价物是什么?
谢谢!
2条答案
按热度按时间093gszye1#
文档说明,如果加载程序(使用hcatloader())后面紧跟着一个过滤器,那么加载程序将只加载指定的分区,而不是加载整个数据集然后过滤掉记录。
摘自《编程Pig》一书:
“hcatalog包含加载函数hcatloader。hcatloader的位置字符串是表的名称。它实现了loadmetadata,因此您不需要在load语句中指定模式;Pig会从hcatloader那里得到的。另外,由于pig实现了这个接口,因此它可以使用hcatalog的分区。如果在加载后放置filter语句来描述要立即读取的分区,pig会将其推入加载,这样hcatalog只返回相关分区。”
这本书非常好,目前在这里作为开放源码材料提供:http://chimera.labs.oreilly.com/books/1234000001811/ch12.html#cassandra
2ledvvac2#
我认为你的问题有两部分。
第一部分,https://cwiki.apache.org/confluence/display/hive/hcatalog+loadstore 但我担心这首先会将整个数据加载到包a中,然后只将其过滤到包b中。我说的对吗?
ans1)不,当您在load语句之后应用过滤器时,hcatalog足够聪明,可以加载您在filter语句中指定的分区。
第2部分)将路径“filepath”中的数据加载到表tablename[分区(partiction(partcol1=val1,partcol2=val2…)]
用hcatalog在pig中这个构造的等价物是什么?
ans 2)是的,您可以使用org.apache.hcatalog.pig.hcatstorer('particol1=val1,partcol2=val2'),使用store a into'tablename';
例如:使用org.apache.hcatalog.pig.hcatstorer('datestamp=20110924')将数据存储到“tablename”中;
如果你有任何疑问,请发表评论。
谢谢