作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个映射到某个目录的配置单元外部表。该目录包含几个文件。
我想在有用户“abc”的地方运行查询,比如查找文件名
select file_name , usr from usrs_tables where usr = "abc"
当然,数据中不包含文件名。
在 MapReduce 中我可以通过
FileSplit fileSplit = (FileSplit)context.getInputSplit();
String filename = fileSplit.getPath().getName();
System.out.println("File name "+filename);
System.out.println("Directory and File name"+fileSplit.getPath().toString());
如何在 Hive 中执行此操作?
最佳答案
是的,您可以使用名为 INPUT__FILE__NAME
的虚拟列检索在其中找到记录的文件,例如:
select INPUT__FILE__NAME, id, name from users where ...;
产生类似的东西:
hdfs://localhost.localdomain:8020/user/hive/warehouse/users/users1.txt 2 user2
hdfs://localhost.localdomain:8020/user/hive/warehouse/users/users2.txt 42 john.doe
如有必要,请使用提供的 string functions从 uri 中修剪主机和目录。
您可以在此处找到有关虚拟列的文档:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+VirtualColumns
关于hadoop - 如何将输入文件名作为配置单元查询中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16715818/
我是一名优秀的程序员,十分优秀!