在 HiveQL 中读取 HDFS 扩展属性

Reading HDFS extended attributes in HiveQL

我正在处理一个用例,我们希望将元数据(例如加载时间、数据源...)作为 HDFS 扩展属性 (xattrs) 添加到原始文件。 我想知道 HiveQL 是否有办法在结果集中的查询中检索此类元数据。 这将避免将此类元数据存储在原始文件中的每个记录中。 自定义 Hive SerDe 是否是使此类 xattrs 可用的一种方式?否则,您是否看到另一种方法可以实现这一目标?

我对此还比较陌生,如果我误用了术语,请多多包涵。

谢谢

可能还有其他实现方式,但在我发现Hive virtual column 'INPUT__FILE__NAME'包含源HDFS文件的URL后,我在Java读取它的扩展属性。此函数可在 Hive 查询中用作:

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;
  }
}

查询非常大的数据集时,我没有测试它的性能。 我希望可以通过类似于使用虚拟列 INPUT__FILE__NAME.

的方式将扩展属性作为虚拟列直接检索