Hadoop 在配置单元中,如何仅将部分原始数据加载到表中?
我有一个典型的CREATETABLE语句,如下所示:Hadoop 在配置单元中,如何仅将部分原始数据加载到表中?,hadoop,hive,s3cmd,Hadoop,Hive,S3cmd,我有一个典型的CREATETABLE语句,如下所示: CREATE EXTERNAL TABLE temp_url ( MSISDN STRING, TIMESTAMP STRING, URL STRING, TIER1 STRING ) row format delimited fields terminated by '\t' lines terminated by '\n' LOCATION 's3://mybucket/input/project_blah
CREATE EXTERNAL TABLE temp_url (
MSISDN STRING,
TIMESTAMP STRING,
URL STRING,
TIER1 STRING
)
row format delimited fields terminated by '\t' lines terminated by '\n'
LOCATION 's3://mybucket/input/project_blah/20140811/';
其中/20140811/是一个目录,其中包含千兆字节的数据
装载东西不是问题。然而,查询它上面的任何内容都会阻塞蜂巢,只会给我一些映射错误
因此,我想问一下,是否有办法只加载/20140811/中的部分数据。我知道我可以从文件夹中选择一些文件,将它们转储到另一个文件夹中,然后使用它,但这似乎很乏味,尤其是当我有20个左右的/20140811/目录时
有没有这样的东西:
CREATE EXTERNAL TABLE temp_url (
MSISDN STRING,
TIMESTAMP STRING,
URL STRING,
TIER1 STRING
)
row format delimited fields terminated by '\t' lines terminated by '\n'
LOCATION 's3://mybucket/input/project_blah/Half_of_20140811/';
我也愿意接受非蜂群的答案。也许在s3cmd中有一种方法可以快速获取/20140811中的一定数量的数据/将其转储到/20140811\u减半/或其他什么东西中
谢谢。我建议以下解决方法: 创建具有相同结构的临时表。使用like 插入新表格,从旧表格中选择*限制1000; 您可以添加尽可能多的筛选条件以筛选出数据并加载
希望这对您有所帮助。既然您说您有20个左右的/20140811/目录,为什么不尝试在这些目录上创建一个包含分区的外部表,并在单个分区上运行查询。您的文件有命名模式吗?在这种情况下,您可以使用通配符过滤/移动文件。我建议您在尝试查询表时实际调试错误,而不是处理错误。Hive设计用于查询TB级的数据。也许您打算使用s3n://而不是s3://?您的意思是,在/project_blah/上创建一个表,然后添加/20140811/作为分区?这不就是使用/20140811/的全部内容吗?如果是这样,那就是我要避免的。您能告诉我您正在创建配置单元表的文件夹的目录结构吗?/20140811/?它只是一个文件夹,里面有文件。所述文件的名称为0000cee31wfa00\U part01或类似的名称-也指蜂巢吐出的文件。好的……那么您是否可以为ex创建一个文件夹以及20140811,20140811_2并将原始201408文件夹中的多个文件之一放入此新文件夹,然后在两个目录20140811和20140811_2上创建分区。在查询时,您可以专门在20140811_2上指定该搜索。这将防止查询对整个数据执行操作,并将运行得更快这可能是最简单的解决方案,但我希望避免对初始表进行任何选择位置限制,因为这会占用时间。如果将impala同步到同一个配置单元元存储,此过程可能需要不到一分钟的时间。