通过从其他表中拆分配置单元列插入到配置单元结构列中

ykejflvf  于 2021-06-26  发布在  Hive
关注(0)|答案(3)|浏览(422)

我有下面的要求,我想实现使用Hive。
具有结构1列的表a。
创建表b以拆分表a的结构列并作为两个不同的列加载。
下面是ddl和我尝试过的步骤。
表a:
来自反序列化程序的群集字符串
来自反序列化程序的架构字符串
反序列化程序中的表字符串
来自反序列化程序的primarykey结构
来自反序列化程序的数据结构
已从反序列化程序中删除布尔值
从反序列化程序截断布尔值
反序列化程序中的版本bigint
表b:来自反序列化程序的用户id字符串
shippingattr结构billingattr结构
我试过以下方法。

  1. insert into Table B
  2. (
  3. user_id,
  4. shippingattr.username,
  5. shippingattr.shipping_fname,
  6. shippingattr.shipping_lname,
  7. shippingattr.shipping_address,
  8. shippingattr.shipping_address2,
  9. shippingattr.shipping_city,
  10. shippingattr.shipping_state,
  11. shippingattr.shipping_zip,
  12. shippingattr.phone,
  13. billingattr.billing_is_shipping,
  14. billingattr.billing_fname,
  15. billingattr.billing_lname,
  16. billingattr.billing_address,
  17. billingattr.billing_address2,
  18. billingattr.billing_city,
  19. billingattr.billing_state,
  20. billingattr.billing_zip
  21. )
  22. select
  23. primarykey.user_id,
  24. data.username,
  25. data.shipping_fname,
  26. data.shipping_lname,
  27. data.shipping_address,
  28. data.shipping_address2,
  29. data.shipping_city,
  30. data.shipping_state,
  31. data.shipping_zip,
  32. data.phone,
  33. data.billing_is_shipping,
  34. data.billing_fname,
  35. data.billing_lname,
  36. data.billing_address,
  37. data.billing_address2,
  38. data.billing_city,
  39. data.billing_state,
  40. data.billing_zip
  41. from Table A;

但是这个错误出来了,你能告诉我插入这个数据的正确方法吗。
错误消息:org.apache.hadoop.hive.ql.parse.hiveparser\u selectclauseparser.selectclause(hiveparser\u selectclauseparser)上的noviableException(284@[])。java:742)在org.apache.hadoop.hive.ql.parse.hiveparser.selectclause(hiveparser。java:40147)在org.apache.hadoop.hive.ql.parse.hiveparser.singleselectstatement(hiveparser。java:38048)在org.apache.hadoop.hive.ql.parse.hiveparser.selectstatement(hiveparser。java:37754)在org.apache.hadoop.hive.ql.parse.hiveparser.regularbody(hiveparser。java:37654)在org.apache.hadoop.hive.ql.parse.hiveparser.querystatementexpressionbody(hiveparser。java:36898)在org.apache.hadoop.hive.ql.parse.hiveparser.querystatementexpression(hiveparser。java:36774)在org.apache.hadoop.hive.ql.parse.hiveparser.execstatement(hiveparser。java:1338)在org.apache.hadoop.hive.ql.parse.hiveparser.statement(hiveparser。java:1036)在org.apache.hadoop.hive.ql.parse.parsedriver.parse(parsedriver。java:199)在org.apache.hadoop.hive.ql.parse.parsedriver.parse(parsedriver。java:166)在org.apache.hadoop.hive.ql.driver.compile(driver。java:404)在org.apache.hadoop.hive.ql.driver.compile(driver。java:322)位于org.apache.hadoop.hive.ql.driver.compileinternal(驱动程序。java:975)在org.apache.hadoop.hive.ql.driver.runinternal(driver。java:1040)在org.apache.hadoop.hive.ql.driver.run(驱动程序。java:911)在org.apache.hadoop.hive.ql.driver.run(driver。java:901)在org.apache.hadoop.hive.cli.clidriver.processlocalcmd(clidriver。java:275)在org.apache.hadoop.hive.cli.clidriver.processcmd(clidriver。java:227)在org.apache.hadoop.hive.cli.clidriver.processline(clidriver。java:430)在org.apache.hadoop.hive.cli.clidriver.executedriver(clidriver。java:803)在org.apache.hadoop.hive.cli.clidriver.run(clidriver。java:697)位于org.apache.hadoop.hive.cli.clidriver.main(clidriver。java:636)在sun.reflect.nativemethodaccessorimpl.invoke0(本机方法)在sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl)。java:57)在sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl。java:43)在java.lang.reflect.method.invoke(方法。java:606)在org.apache.hadoop.util.runjar.main(runjar。java:212)失败:parseexception行1:50无法识别select子句中“(“”user\u id“”,”附近的输入

vjhs03f7

vjhs03f71#

上述情况可按以下方式处理。插入数据的示例struct:-

  1. create table xyz (a STRUCT<x : int , y :String , z:int , zz : int >, b string );
  2. insert into table xyz select named_STRUCT(x,12,y,'text',z,2,zz,3) , 'text' from dummy limit 1;
  3. create table xyz1 (a1 STRUCT<x : int , y :String > , a2 struct<z:int , zz : int> , b String);
  4. insert into table xyz1 select named_struct('x',a.x,'y',a.y) ,named_struct('z',a.z,'zz',a.zz) ,b from xyz;
  5. insert into table xyz1(a1,a2,b) select named_struct('x',a.x,'y',a.y) ,named_struct('z',a.z,'zz',a.zz) , b from xyz;
ne5o7dgx

ne5o7dgx2#

对于“开始”,配置单元不排除要插入的列列表。
应按顺序插入所有列。

  1. insert into Table B
  2. select ...
k75qkfdt

k75qkfdt3#

谢谢你的建议,我是这样实施的。
插入到表b中,选择名为“\u struct('username',table2.data.username,'shipping\u fname',table2.data.shipping\u fname,…)的用户“\u id”作为shippingattr,名为“\u struct('billing\u is\u shipping',table2.data.data.billing\u zip,…,'billing\u zip',table2.data.billing\u zip)作为表a中的billingattr;
谢谢和问候,斯里维尼什

相关问题