Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml xpath查询(在配置单元中)只返回属性的第一个实例_Xml_Xpath_Hive - Fatal编程技术网

Xml xpath查询(在配置单元中)只返回属性的第一个实例

Xml xpath查询(在配置单元中)只返回属性的第一个实例,xml,xpath,hive,Xml,Xpath,Hive,我有一个xpath查询(使用配置单元),希望在其中显示所有book节点id属性值 我的Xpath语句如下所示: Select xpath_string (bookxml, '/catalog/book/@id') from bookxml; CREATE EXTERNAL TABLE books (books_xml string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' LOCATION '

我有一个xpath查询(使用配置单元),希望在其中显示所有book节点id属性值

我的Xpath语句如下所示:

Select xpath_string (bookxml, '/catalog/book/@id') from bookxml;
CREATE EXTERNAL TABLE books (books_xml string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
LOCATION '/home/dino/Downloads/books';

当我在配置单元中运行它时,它只返回第一个图书id,而不是所有的值。你能建议一个我可以返回所有图书id的更改吗?

我根本不知道Hive,但我对这个问题很感兴趣,所以我在谷歌上搜索了“Hive xpath\u string”,第一次点击的摘要是

给定XPath表达式,每个函数返回一个特定的配置单元类型: xpath返回字符串的配置单元数组。xpath_字符串返回一个字符串。 xpath\u布尔返回

因此,我花了大约2秒钟的时间才发现您想要使用xpath函数而不是xpath_字符串函数


有时我想知道是否有人在查阅文档之前先查阅StackOverflow…

我根本不知道Hive,但我对这个问题很感兴趣,所以我在谷歌上搜索了“Hive xpath\u string”,第一次点击的摘要是

给定XPath表达式,每个函数返回一个特定的配置单元类型: xpath返回字符串的配置单元数组。xpath_字符串返回一个字符串。 xpath\u布尔返回

因此,我花了大约2秒钟的时间才发现您想要使用xpath函数而不是xpath_字符串函数


有时我想知道是否有人在转向文档之前转向StackOverflow…

正如Michael所说,问题在于xpath\u字符串函数

我已经创建了像这样的小样本文件

<catalog><book id="1"></book><book id="2"></book></catalog>
<catalog><book id="3"></book><book id="5"></book></catalog>
使用xpath_字符串函数运行查询时,只会得到第一个ID,如下所示:

hive> select xpath_string(books_xml, '/catalog/book/@id') from books;
结果:

Mapred Local Task Succeeded . Convert the Join into MapJoin
OK
1
3
Time taken: 3.765 seconds, Fetched: 2 row(s)
Mapred Local Task Succeeded . Convert the Join into MapJoin
OK
["1","2"]
["3","5"]
Time taken: 4.512 seconds, Fetched: 2 row(s)
如果使用xpath函数运行相同的查询,则会得到以下结果:

hive> select xpath(books_xml, '/catalog/book/@id') from books;
结果:

Mapred Local Task Succeeded . Convert the Join into MapJoin
OK
1
3
Time taken: 3.765 seconds, Fetched: 2 row(s)
Mapred Local Task Succeeded . Convert the Join into MapJoin
OK
["1","2"]
["3","5"]
Time taken: 4.512 seconds, Fetched: 2 row(s)

正如Michael所说,问题在于xpath_字符串函数

我已经创建了像这样的小样本文件

<catalog><book id="1"></book><book id="2"></book></catalog>
<catalog><book id="3"></book><book id="5"></book></catalog>
使用xpath_字符串函数运行查询时,只会得到第一个ID,如下所示:

hive> select xpath_string(books_xml, '/catalog/book/@id') from books;
结果:

Mapred Local Task Succeeded . Convert the Join into MapJoin
OK
1
3
Time taken: 3.765 seconds, Fetched: 2 row(s)
Mapred Local Task Succeeded . Convert the Join into MapJoin
OK
["1","2"]
["3","5"]
Time taken: 4.512 seconds, Fetched: 2 row(s)
如果使用xpath函数运行相同的查询,则会得到以下结果:

hive> select xpath(books_xml, '/catalog/book/@id') from books;
结果:

Mapred Local Task Succeeded . Convert the Join into MapJoin
OK
1
3
Time taken: 3.765 seconds, Fetched: 2 row(s)
Mapred Local Task Succeeded . Convert the Join into MapJoin
OK
["1","2"]
["3","5"]
Time taken: 4.512 seconds, Fetched: 2 row(s)

描述扩展功能使生活更轻松。这肯定说明:

描述函数扩展路径\u字符串

xpath_字符串(xml,xpath)-返回与xpath表达式匹配的第一个xml节点的文本内容 例如:

从src LIMIT 1中选择xpath_字符串('bcc','a/c');
>“抄送”
从src LIMIT 1中选择xpath_字符串('b1b2','a/b');
>“b1”
从src LIMIT 1中选择xpath_字符串('b1b2','a/b[2]');
>“b2”
从src LIMIT 1中选择xpath_字符串('b1b2','a');
>“b1b2”
描述函数扩展路径

xpath(xml,xpath)-返回xml节点中与xpath表达式匹配的值的字符串数组 例如:

从src LIMIT 1中选择xpath('b1b2b3c1c2','a/text()');
>[]
从src LIMIT 1中选择xpath('b1b2b3c1c2','a/b/text()');
>[“b1”、“b2”、“b3”]
从src LIMIT 1中选择xpath('b1b2b3c1c2','a/c/text()');
>[“c1”、“c2”]

描述扩展功能使生活更轻松。这肯定说明:

描述函数扩展路径\u字符串

xpath_字符串(xml,xpath)-返回与xpath表达式匹配的第一个xml节点的文本内容 例如:

从src LIMIT 1中选择xpath_字符串('bcc','a/c');
>“抄送”
从src LIMIT 1中选择xpath_字符串('b1b2','a/b');
>“b1”
从src LIMIT 1中选择xpath_字符串('b1b2','a/b[2]');
>“b2”
从src LIMIT 1中选择xpath_字符串('b1b2','a');
>“b1b2”
描述函数扩展路径

xpath(xml,xpath)-返回xml节点中与xpath表达式匹配的值的字符串数组 例如:

从src LIMIT 1中选择xpath('b1b2b3c1c2','a/text()');
>[]
从src LIMIT 1中选择xpath('b1b2b3c1c2','a/b/text()');
>[“b1”、“b2”、“b3”]
从src LIMIT 1中选择xpath('b1b2b3c1c2','a/c/text()');
>[“c1”、“c2”]

Dino,我实际上需要生成您显示的第一个使用xpath\u字符串的结果。我想在单独的行上显示1和3。但是,当我使用您的示例创建外部表代码时,配置单元返回一条错误消息。它提交map reduce作业,然后失败:执行错误,从org.apache.hadoop.hive.ql.exec.MapRedTask返回代码2。我使用的是Hortonworks为Microsoft开发的HDInsight developer preview 0.8版本。不确定这是否是问题所在。David,我使用的是0.11 Apache Hive发行版,它处于本地模式。您遇到的这个问题与环境的配置有关。你能描述一下你的环境是怎样的吗?您是在群集模式下运行还是在独立模式下运行?另外,如果您可以找到运行任务以从中提取真实错误消息的日志?Dino,我实际上需要生成您显示的第一个使用xpath_字符串的结果。我想在单独的行上显示1和3。但是,当我使用您的示例创建外部表代码时,配置单元返回一条错误消息。它提交map reduce作业,然后失败:执行错误,从org.apache.hadoop.hive.ql.exec.MapRedTask返回代码2。我使用的是Hortonworks为Microsoft开发的HDInsight developer preview 0.8版本。不确定这是否是问题所在。David,我使用的是0.11 Apache Hive发行版,它处于本地模式。您遇到的这个问题与环境的配置有关。你能描述一下你的环境是怎样的吗?您是在群集模式下运行还是在独立模式下运行?另外,您是否可以找到运行任务以从中提取真实错误消息的日志?