Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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
Linux 在将数据导入db2表时,如何将多行或列数据从文本文件连接到一行或一列中_Linux_Shell_Db2_Sh_Db2 Luw - Fatal编程技术网

Linux 在将数据导入db2表时,如何将多行或列数据从文本文件连接到一行或一列中

Linux 在将数据导入db2表时,如何将多行或列数据从文本文件连接到一行或一列中,linux,shell,db2,sh,db2-luw,Linux,Shell,Db2,Sh,Db2 Luw,例如: 1) 文件有 2) 数据: 3) 表: 表中的列:ID Name Job Hobby Salary 是否可以按如下方式将数据加载到表中: 1-ram-architect-tenniscricketfootbalgardening-20000 2-krish-teacher-paintingcooking-25000 命令:db2“从coldel0x7x keepblanks修改的DEL的ABC.FILE加载客户端替换为tablename(ID、Name、Job、Hobby、sa

例如: 1) 文件有

2) 数据:

3) 表:
表中的列:
ID Name Job Hobby Salary

是否可以按如下方式将数据加载到表中:

1-ram-architect-tenniscricketfootbalgardening-20000    
2-krish-teacher-paintingcooking-25000

命令:db2“从coldel0x7x keepblanks修改的DEL的ABC.FILE加载客户端替换为tablename(ID、Name、Job、Hobby、salary)不可恢复”

使用
Load CLIENT
IMPORT
,您无法在一次操作中实现自己想要的目标

你要求去规范化,我想你理解后果

无论如何,您可以使用多步骤方法,首先将其加载/导入到临时表中,然后在丢弃临时表之前,在第二步中使用SQL对最终表进行反规范化

或者,如果您熟悉
awk
,并且数据文件已正确排序,则可以在加载/导入之前将文件从外部预处理到数据库


或者使用ETL工具。

您可以使用
摄取
命令,而不是
加载
。 必须事先使用以下命令为此命令创建相应的基础结构,例如:

CALL SYSINSTALLOBJECTS('INGEST', 'C', 'USERSPACE1', NULL);
随后使用以下命令加载文件:

INGEST FROM FILE ABC.FILE
FORMAT DELIMITED by '|'    
(        
  $id       INTEGER EXTERNAL
, $name     CHAR(8)
, $job      CHAR(20)
, $hobby    CHAR(20)
, $salary   INTEGER EXTERNAL
, $hobby2   CHAR(20)
)
MERGE INTO tablename
ON ID = $id
WHEN MATCHED THEN
    UPDATE SET hobby = hobby CONCAT $hobby CONCAT $hobby2
WHEN NOT MATCHED THEN
    INSERT (ID, NAME, JOB, HOBBY, SALARY) VALUES($id, $name, $job, $hobby CONCAT $hobby2, $salary);

请在您的问题中添加您的努力(以代码的形式),这是非常受鼓励的,谢谢。问题到底是什么?加载和导入使用输入文件中的一行作为目标表中的新行。如果需要更多,请搜索ETL。您可以忽略此“-”符号。我只是用它来解释目的。如文件中所述,数据用|分隔,我想用我已经解释过的方法将数据加载到一个普通的db2表中,也就是说,我想结合hobby和hobby2,如果我们有另一行相同的ID,我也想添加这些嗜好,并作为一行加载到表中。如果文件不包含头,该文件不能包含任何头,该怎么办标题。$variables由您使用任何您喜欢的命名进行分配。它们的数量和类型必须与文件内容兼容。调用SYSINSTALLOBJECTS('inset','C','USERSPACE1',NULL);请您解释一下这些参数中指定的C、USERSPACE1和null是什么,请参见Db2文档中的描述。
CALL SYSINSTALLOBJECTS('INGEST', 'C', 'USERSPACE1', NULL);
INGEST FROM FILE ABC.FILE
FORMAT DELIMITED by '|'    
(        
  $id       INTEGER EXTERNAL
, $name     CHAR(8)
, $job      CHAR(20)
, $hobby    CHAR(20)
, $salary   INTEGER EXTERNAL
, $hobby2   CHAR(20)
)
MERGE INTO tablename
ON ID = $id
WHEN MATCHED THEN
    UPDATE SET hobby = hobby CONCAT $hobby CONCAT $hobby2
WHEN NOT MATCHED THEN
    INSERT (ID, NAME, JOB, HOBBY, SALARY) VALUES($id, $name, $job, $hobby CONCAT $hobby2, $salary);