我在Amazon EMR上使用Hive外部表。这些表通常是分区的,每个分区指向S3中的不同存储桶。我正在使用MySQL进行Hive元数据存储。
我希望能够在S3上看到每个分区指向的位置/存储桶。我查看了MySQL中的元数据表。我可以在那里看到分区信息,但没有任何东西表明数据的实际位置。
这些数据在MySQL中是否可用,还是可以通过Hive命令获取?
答案 0 :(得分:6)
以下配置单元命令可用于获取位置
蜂房&GT; show create table <TableName>;
请在上述配置单元命令的输出中搜索LOCATION行。
答案 1 :(得分:3)
对于外部分区表,每个分区都有一个位置,而不是具有位置的表本身。你需要使用像
这样的东西 show partitions employees
获取分区列表
describe extended employees partition (year='2016', month='05', day='25')
查看特定分区的位置。
show create table employees
等其他命令可能无法提供有关数据位置的有用信息:
LOCATION
'hdfs://nameservice1/user/hive/warehouse/something.db/employees'
答案 2 :(得分:2)
答案 3 :(得分:0)
正如h4ck3r所提到的,您可以使用“显示创建表”命令来查找位置信息。
要查看分区特定信息,请使用Show Table/Partition Extended:
SHOW TABLE EXTENDED将列出与给定正则表达式匹配的所有表的信息。如果存在分区规范,则用户不能对表名使用正则表达式。此命令的输出包括基本表信息和文件系统信息,如totalNumberFiles,totalFileSize,maxFileSize,minFileSize,lastAccessTime和lastUpdateTime。如果存在分区,它将输出给定分区的文件系统信息,而不是表的文件系统信息。
答案 4 :(得分:0)
如果要查看配置单元表的实际数据存储位置,可以使用多种方法。
1)hive> show create table <TableName>;
它将长期为您提供表语法以及实际数据位于path的位置。
2)describe extended table_name
或describe formatted table_name
。
它将为您提供位置,所有者,注释,表类型等详细信息。
3)仅当您要检查单个表的位置时,上述格式才有帮助。但是,如果您要检查多个数据库中的多个表的位置,则上述步骤将无济于事。
因此,在这里我们可以配置元存储并通过单个查询获取多个表的位置。
我看了一篇非常好的文章,关于如何获取所有配置单元表HDFS路径的位置,请阅读。 https://askdoubts.com/question/how-to-find-out-list-of-all-hive-external-tables-and-hdfs-paths-from-hive-metastore/#comment-19
谢谢, 马赫什