在HiveQL中读取HDFS扩展属性

在HiveQL中读取HDFS扩展属性,hive,metadata,hdfs,Hive,Metadata,Hdfs,我正在研究一个用例,我们希望将元数据(例如加载时间、数据源…)作为HDFS扩展属性(XATTR)添加到原始文件中。 我想知道HiveQL是否有办法在结果集中的查询中检索这样的元数据。 这将避免在原始文件中的每个记录中存储此类元数据。 定制蜂巢服务是提供此类Xattr的一种方式吗?否则,你有没有其他的方法让这成为可能 我在这方面还是比较新手,所以如果我误用了术语,请容忍我 谢谢可能还有其他方法来实现它,但是在我发现包含源HDFS文件URL的“INPUT\u FILE\u NAME”后,我用Java

我正在研究一个用例,我们希望将元数据(例如加载时间、数据源…)作为HDFS扩展属性(XATTR)添加到原始文件中。 我想知道HiveQL是否有办法在结果集中的查询中检索这样的元数据。 这将避免在原始文件中的每个记录中存储此类元数据。 定制蜂巢服务是提供此类Xattr的一种方式吗?否则,你有没有其他的方法让这成为可能

我在这方面还是比较新手,所以如果我误用了术语,请容忍我


谢谢

可能还有其他方法来实现它,但是在我发现包含源HDFS文件URL的“INPUT\u FILE\u NAME”后,我用Java创建了一个用户定义的函数来读取它的扩展属性。此函数可在配置单元查询中用作:

XAttrSimpleUDF(INPUT__FILE__NAME,'user.my_key')
UDF的(快速且肮脏的)Java源代码如下所示:

public class XAttrSimpleUDF extends UDF {

  public Text evaluate(Text uri, Text attr) {
    if(uri == null || attr == null) return null;

    Text xAttrTxt = null;
    try {
        Configuration myConf = new Configuration();

        //Creating filesystem using uri
        URI myURI = URI.create(uri.toString());
        FileSystem fs = FileSystem.get(myURI, myConf);

        // Retrieve value of extended attribute
        xAttrTxt = new Text(fs.getXAttr(new Path(myURI), attr.toString()));
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return xAttrTxt;
  }
}
在查询非常大的数据集时,我没有测试它的性能。 我希望扩展属性可以像使用虚拟列输入\文件\名称一样直接作为虚拟列检索