iq load 问题
<p><font size="5">问题已经解决,特别感谢<span lang="EN-US" style="FONT-SIZE: 8pt; COLOR: #61b713; FONT-FAMILY: Verdana; mso-bidi-font-family: Tahoma;"><font size="4"><strong>l5066113</strong><font color="#000000">和<strong> </strong></font><strong>jonse</strong><font color="#000000">的热心帮助!</font></font></span></font></p><p>我用下面的命令导出数据</p><p>select * from "DW"."d_tax_kind";<br/>output to 'c:\d_tax_kind.out'<br/>delimited by '|'<br/>format ASCII</p><p>然后用下面的命令导入数据,但老是报connot convert to a datetime(column end_date)的错误</p><p>LOAD TABLE d_tax_kind<br/>( TAX_KIND_KEY '|',<br/>TAX_KIND_CODE '|',<br/>TAX_KIND_NAME '|',<br/>TAX_ITEM_CODE '|',<br/>TAX_ITEM_NAME '|',<br/>TAX_FLAG '|',<br/>EFFECTIVE_DATE '\x0d\x0a',<br/>END_DATE '\x0d\x0a',<br/>)<br/>FROM 'c:\d_tax_kind.out' <br/>ESCAPES OFF <br/>QUOTES Off <br/>format ASCII<br/>WITH CHECKPOINT ON </p><p></p><p>我知道是日期的问题,已经改到下面方式还是不行</p><p>LOAD TABLE d_tax_kind<br/>( TAX_KIND_KEY '|',<br/>TAX_KIND_CODE '|',<br/>TAX_KIND_NAME '|',<br/>TAX_ITEM_CODE '|',<br/>TAX_ITEM_NAME '|',<br/>TAX_FLAG '|',<br/>EFFECTIVE_DATE datetime ('yyyy-mm-dd Thh:mm:ss.m'),<br/>END_DATE datetime('yyyy-mm-dd Thh:mm:ss:m')<br/>)<br/>FROM 'c:\d_tax_kind.out' <br/>ESCAPES OFF <br/>QUOTES Off <br/>format ASCII<br/>WITH CHECKPOINT ON </p>
[此贴子已经被作者于2007-1-10 10:36:20编辑过]
<p>文本导出应该加上quotes '',否则字符类型的数据会用'引起来的。</p><p>select * from "DW"."d_tax_kind";<br/>output to 'c:\d_tax_kind.out'<br/>delimited by '|'<br/>format ASCII<br/>quotes '';</p><p></p><p>文本导入的load语句也有点问题,行结束符应该只在最后一列指定。改成下面的语句试试看。</p><p>LOAD TABLE d_tax_kind<br/>(<br/> TAX_KIND_KEY '|',<br/> TAX_KIND_CODE '|',<br/> TAX_KIND_NAME '|',<br/> TAX_ITEM_CODE '|',<br/> TAX_ITEM_NAME '|',<br/> TAX_FLAG '|',<br/> EFFECTIVE_DATE '|',<br/> END_DATE '\x0a'<br/>)<br/>FROM 'c:\d_tax_kind.out' <br/>ESCAPES OFF <br/>QUOTES Off <br/>format ASCII<br/>WITH CHECKPOINT ON</p>
[此贴子已经被作者于2007-1-6 20:29:33编辑过]
<p>谢谢2楼的答复,但是我按照下面的方法导出的时候报syntax error near "DW",报语法错误。即使去掉也报语法错误</p><p>select * from "DW"."d_tax_kind"<br/>output to 'c:\d_tax_kind.txt'<br/>delimited by '|'<br/>format ASCII<br/>quotes '';</p>
语法错误
<p>语法错误:</p><p>应该是: output to 'c:\d_tax_kind.txt'<br/>format ascii<br/>delimited by '|'<br/>quote '';</p><p></p><p>quote 没有s.</p><p></p> <p>非常感谢<strong><font face="Verdana" color="#61b713">l5066113 and jonse </font></strong>的热心帮助。</p><p>但是还是load 不进去,:( </p><p>报number of bytes (512) for a column from an input file has exceeded the maxinum allowed(4)的错误</p><p>导出的command</p><p>select * from d_tax_kind;<br/>output to 'c:\d_tax_kind.out'<br/>delimited by '|'<br/>format ASCII<br/>quote '';</p><p>导入的command</p><p>LOAD TABLE d_tax_kind<br/>( TAX_KIND_KEY '|',<br/>TAX_KIND_CODE '|',<br/>TAX_KIND_NAME '|',<br/>TAX_ITEM_CODE '|',<br/>TAX_ITEM_NAME '|',<br/>TAX_FLAG '|',<br/>EFFECTIVE_DATE '|',<br/>END_DATE '\x0a')<br/>FROM 'c:\d_tax_kind.out' <br/>ESCAPES OFF<br/>delimited by '|' <br/>QUOTES Off <br/>format ASCII<br/>WITH CHECKPOINT ON </p> 可以将你的<p>导入的command</p><p>LOAD TABLE d_tax_kind<br/>( TAX_KIND_KEY '|',<br/>TAX_KIND_CODE '|',<br/>TAX_KIND_NAME '|',<br/>TAX_ITEM_CODE '|',<br/>TAX_ITEM_NAME '|',<br/>TAX_FLAG '|',<br/>EFFECTIVE_DATE '|',<br/>END_DATE '\x0a')<br/>FROM 'c:\d_tax_kind.out' <br/>ESCAPES OFF<br/>delimited by '|' <br/>QUOTES Off <br/>format ASCII<br/>WITH CHECKPOINT ON</p><p>中的'\x0a'换成'</p><p>'试试看,就是在''中按回车键。</p><p></p><p>同时感谢<font face="Verdana" color="#61b713"><strong>jonse</strong><font color="#000000">的指正。</font></font></p> <p>To:<strong><font face="Verdana" color="#61b713">l5066113</font></strong></p><p>我刚才用您的方法试了一下,但还是报connot convert to a datetime(column end_date)的错</p><p>LOAD TABLE d_tax_kind<br/>( TAX_KIND_KEY '|',<br/>TAX_KIND_CODE '|',<br/>TAX_KIND_NAME '|',<br/>TAX_ITEM_CODE '|',<br/>TAX_ITEM_NAME '|',<br/>TAX_FLAG '|',<br/>EFFECTIVE_DATE '|',<br/>END_DATE '</p><p>')<br/>FROM 'c:\d_tax_kind.out' <br/>ESCAPES OFF<br/>delimited by '|' <br/>QUOTES Off <br/>format ASCII<br/>WITH CHECKPOINT ON</p><p></p> <p>可以先建立一张临时表,插入几条测试数据,测一下SQL.</p><p>create table test_load (<br/> load_date char(8) not null,<br/> effective_date datetime not null,<br/> end_date datetime not null<br/>);</p><p><br/>insert into test_load<br/>select<br/> '20070108',<br/> now(),<br/> now()<br/>;</p><p>select * from test_load;<br/>output to 'c:\test_load.out'<br/>delimited by '|'<br/>format ascii<br/>quote '';</p><p>load table test_load<br/>(<br/> load_date '|',<br/> effective_date '|',<br/> end_date '<br/>'<br/>)<br/>from 'c:\test_load.out' <br/>escapes off<br/>delimited by '|' <br/>quotes off <br/>format ascii<br/>with checkpoint on;</p><p>如果成功,则说明datetime类型的数据用这种方法没问题。</p><p>是你表d_tax_kind中的数据有问题:</p><p>1、EFFECTIVE_DATE、END_DATE中有空值或非法数据</p><p>2、TAX_KIND_NAME、TAX_ITEM_NAME等长字符型数据中有字符“|”</p> <font face="Verdana"><p>非常感谢<font face="Verdana" color="#61b713"><strong>l5066113</strong><font color="#000000">的热心帮助</font></font></p><p><font face="Verdana">确实是这样的在end_date字段里面有很多都是空值,那请问一下应该如何处理空值问题呢<strong>?谢谢!</strong></font></p></font> <p><font color="#f73809">0、卸载数据一般采用set option语句完成,</font></p><p><font color="#f76809">你的错误很可能就入l5066113所说</font></p><p>1、EFFECTIVE_DATE、END_DATE中有空值或非法数据</p><p><font color="#ff3300">如果出现此情况,你可以通过NULL子句描述什么是空值</font></p><p></p><p>2、TAX_KIND_NAME、TAX_ITEM_NAME等长字符型数据中有字符“|”</p><p><font color="#f73809">此种情况,你需要修改你的卸载脚本,字段分隔符号采用多字节符号,在加载脚本中也需要修改分隔符号。<br/></font></p>[此贴子已经被作者于2007-1-9 13:32:03编辑过]
<p>谢谢您,jonse</p><p>我用了您的方法,设置了set temporary option,但end_date这个字段里的空值还是无法处理。请问如何解决?</p><p>(虽然数据已经导进去了,但是是用etl工具生成的脚本和数据,导进去的,我现在就想用脚本的方法把数据导出并且导入)</p><p>set temporary option TEMP_EXTRACT_COLUMN_DELIMITER='|';<br/>set temporary option TEMP_EXTRACT_BINARY='OFF';<br/>set temporary option TEMP_EXTRACT_SWAP='OFF';<br/>SET TEMPORARY OPTION ALLOW_NULLS_BY_DEFAULT='ON';<br/>SET TEMPORARY OPTION ANSINULL='ON';<br/>select * from "DW"."d_tax_kind";<br/>output to 'c:\d_tax_kind.out'<br/>delimited by '|'<br/>format ASCII<br/>quote '';<br/></p>
[此贴子已经被作者于2007-1-9 14:48:55编辑过]
<p>set option与output是IQ的两种不同数据卸载方式。set option的方法数据只能卸载到数据库服务器端,output的方法数据卸载到当前运行端,既可以是服务器端也可以是客户端。</p><p>set option的方法是通过temporary option TEMP_EXTRACT_NAME1来指定文件输出的名称及路径,因此你的数据卸载SQL中的set temporary option都是没用的。</p><p>1、EFFECTIVE_DATE、END_DATE中有空值或非法数据</p><p><font color="#ff3300">如果出现此情况,你可以通过NULL子句描述什么是空值</font></p><p><strong><font face="Verdana" color="#61b713">jonse</font></strong>的意思是说,你可以在load语句中用NULL字句来描述空值,例:</p><p>LOAD TABLE d_tax_kind<br/>(</p><p>TAX_KIND_KEY '|',<br/>TAX_KIND_CODE '|',<br/>TAX_KIND_NAME '|',<br/>TAX_ITEM_CODE '|',<br/>TAX_ITEM_NAME '|',<br/>TAX_FLAG '|',<br/>EFFECTIVE_DATE '|' null(''),<br/>END_DATE '</p><p>' null('')</p><p>)<br/>FROM 'c:\d_tax_kind.out' <br/>ESCAPES OFF<br/>delimited by '|' <br/>QUOTES Off <br/>format ASCII<br/>WITH CHECKPOINT ON</p><p>你可以先看看你生成的文本文件中的空值是什么,然后在null('')中加以描述。</p>
页:
[1]
2