首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HiveContext.sql(“插入”)

HiveContext.sql(“插入”)
EN

Stack Overflow用户
提问于 2017-12-19 08:18:32
回答 2查看 1.3K关注 0票数 2

我试图像这样用HiveContext插入数据:

代码语言:javascript
复制
/* table filedata
CREATE TABLE `filedata`(
  `host_id` string,
  `reportbatch` string,
  `url` string,
  `datatype` string,
  `data` string,
  `created_at` string,
  `if_del` boolean)
*/
hiveContext.sql("insert into filedata (host_id, data) values (\"a1e1\", \"welcome\")")

错误并尝试使用"select":

代码语言:javascript
复制
hiveContext.sql("select \"a1e1\" as host_id, \"welcome\"as data").write.mode("append").saveAsTable("filedata")
/*
stack trace 
java.lang.ArrayIndexOutOfBoundsException: 2
*/

它需要像这样的所有列:

代码语言:javascript
复制
hc.sql("select \"a1e1\" as host_id,
          \"xx\" as reportbatch,
          \"xx\" as url,
          \"xx\" as datatype,
          \"welcome\" as data,
          \"2017\" as created_at, 
          1 as if_del").write.mode("append").saveAsTable("filedata")

是否有方法插入指定的列?例如,只插入列"host_id“和"data".

EN

回答 2

Stack Overflow用户

发布于 2017-12-19 09:15:22

据我所知,Hive不支持将值插入到某些列中。

从文件中

值子句中列出的每一行都插入到表表名中。 必须为表中的每一列提供值。还不支持允许用户只将值插入某些列的标准SQL语法。若要模拟标准SQL,可以为用户不希望向其分配值的列提供空。

所以你应该试试这个:

代码语言:javascript
复制
  val data = sqlc.sql("select 'a1e1', null, null, null, 'welcome', null, null, null")
  data.write.mode("append").insertInto("filedata")

参考这里

票数 1
EN

Stack Overflow用户

发布于 2017-12-19 18:11:23

如果使用行列文件格式(如ORC ),则可以这样做。请参阅下面的工作示例。这个例子在Hive中,但是在HiveContext中会很好地工作。

代码语言:javascript
复制
hive> use default;
OK
Time taken: 1.735 seconds
hive> create table test_insert (a string, b string, c string, d int) stored as orc;
OK
Time taken: 0.132 seconds
hive> insert into test_insert (a,c) values('x','y');
Query ID = user_20171219190337_b293c372-5225-4084-94a1-dec1df9e930d
Total jobs = 1
Launching Job 1 out of 1


Status: Running (Executing on YARN cluster with App id application_1507021764560_1375895)

--------------------------------------------------------------------------------
        VERTICES      STATUS  TOTAL  COMPLETED  RUNNING  PENDING  FAILED  KILLED
--------------------------------------------------------------------------------
Map 1 ..........   SUCCEEDED      1          1        0        0       0       0
--------------------------------------------------------------------------------
VERTICES: 01/01  [==========================>>] 100%  ELAPSED TIME: 4.06 s
--------------------------------------------------------------------------------
Loading data to table default.test_insert
Table default.test_insert stats: [numFiles=1, numRows=1, totalSize=417, rawDataSize=254]
OK
Time taken: 6.828 seconds
hive> select * from test_insert;
OK
x       NULL    y       NULL
Time taken: 0.142 seconds, Fetched: 1 row(s)
hive>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47882633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档