精华内容
下载资源
问答
  • hive把本地的数据文件load导入到

    万次阅读 2019-04-27 18:18:48
    以下实例都是从本地导入: hive> load data local inpath 'sales_info.txt' overwrite into table sales_...如果是从hdfs导入,则原数据文件不存在,相当于剪切过去。 实例1: 建表语句(带分区字段,用逗号...

    以下实例都是从本地导入:

    hive> load data local inpath 'sales_info.txt' overwrite into table sales_info partition(dt='2019-04-26');

    导入后本地的原数据文件依然存在,相当于复制过去;如果是从hdfs导入,则原数据文件不存在,相当于剪切过去。

    实例1:

    建表语句(不带分区字段,用逗号分隔):

    CREATE TABLE `sales_info`(
    `sku_id` string COMMENT '商品id', 
    `sku_name` string COMMENT '商品名称', 
    `category_id3` string COMMENT '三级分类id', 
    `price` double COMMENT '销售价格', 
    `sales_count` bigint COMMENT '销售数量'
    )
    COMMENT '商品销售信息表'
    ROW FORMAT DELIMITED 
    FIELDS TERMINATED BY ',' 
    NULL DEFINED AS '' 
    STORED AS TEXTFILE
    LOCATION
    'hdfs://ns1/abc/sales_info'

    文本内容:

    [abc]$ cat sales_info.txt 
    123,华为Mate10,31,999,20
    456,华为Mate30,31,2999,30
    789,小米5,31,800,20
    1235,小米6,31,900,100
    4562,OPPO Findx,31,3900,50
    [abc]$ 

    导入的命令:(从本地导入。此时只写了文件名。如果是从该文件所在的目录直接输入hive切换到hive环境,则写不写绝对路径均可以,如果不是,则需要写文件的绝对路径,比如:'/home/abc/sales_info.txt'。sales_info.txt是否是可执行权限均可以。)

    hive> load data local inpath 'sales_info.txt' overwrite into table sales_info ;
    Loading data to table gdm.sales_info
    Table gdm.sales_info stats: [numFiles=1, numRows=0, totalSize=133, rawDataSize=0]
    OK
    Time taken: 0.347 seconds
    

    结果:

    hive> select * from sales_info ;
    OK
    123	华为Mate10	31	999.0	20
    456	华为Mate30	31	2999.0	30
    789	小米5	31	800.0	20
    1235	小米6	31	900.0	100
    4562	OPPO Findx	31	3900.0	50
    Time taken: 0.038 seconds, Fetched: 5 row(s)
    hive> 
    

    结果:

    hive> dfs  -ls hdfs://ns1/abc/sales_info;
    Found 1 items
    -rwxr-xr-x   3 a a       133 2019-04-27 16:33 hdfs://ns1/abc/sales_info/sales_info.txt
    hive> 
    
    hive> set hive.cli.print.header=true; 
    hive> select * from sales_info ;
    OK
    sku_id	sku_name	category_id3	price	sales_count
    123	华为Mate10	31	999.0	20
    456	华为Mate30	31	2999.0	30
    789	小米5	31	800.0	20
    1235	小米6	31	900.0	100
    4562	OPPO Findx	31	3900.0	50
    Time taken: 0.043 seconds, Fetched: 5 row(s)
    hive> 
    

    实例2:

    建表语句(带分区字段,用逗号分隔字段):

    CREATE TABLE `sales_info`(
    `sku_id` string COMMENT '商品id', 
    `sku_name` string COMMENT '商品名称', 
    `category_id3` string COMMENT '三级分类id', 
    `price` double COMMENT '销售价格', 
    `sales_count` bigint COMMENT '销售数量'
    )
    COMMENT '商品销售信息表'
    PARTITIONED BY(
    `dt` string)
    ROW FORMAT DELIMITED 
    FIELDS TERMINATED BY ',' 
    NULL DEFINED AS '' 
    STORED AS TEXTFILE
    LOCATION
    'hdfs://ns1/abc/sales_info'

    文本内容(不带分区数据):

    [abc]$ cat sales_info.txt 
    123,华为Mate10,31,999,20
    456,华为Mate30,31,2999,30
    789,小米5,31,800,20
    1235,小米6,31,900,100
    4562,OPPO Findx,31,3900,50
    [abc]$ 

    导入命令:

    hive> load data local inpath 'sales_info.txt' overwrite into table sales_info ;
    FAILED: SemanticException [Error 10062]: Need to specify partition columns because the destination table is partitioned
    hive> load data local inpath 'sales_info.txt' overwrite into table sales_info partition(dt='2019-04-26') ;
    Loading data to table gdm.sales_info partition (dt=2019-04-26)
    Partition gdm.sales_info{dt=2019-04-26} stats: [numFiles=1, numRows=0, totalSize=133, rawDataSize=0]
    OK
    Time taken: 0.417 seconds
    

    查询结果:

    hive> select *  from sales_info;
    OK
    sku_id	sku_name	category_id3	price	sales_count	dt
    123	华为Mate10	31	999.0	20	2019-04-26
    456	华为Mate30	31	2999.0	30	2019-04-26
    789	小米5	31	800.0	20	2019-04-26
    1235	小米6	31	900.0	100	2019-04-26
    4562	OPPO Findx	31	3900.0	50	2019-04-26
    Time taken: 0.049 seconds, Fetched: 5 row(s)
    hive> 
    

    文本内容(带分区数据):

    [abc]$ cat sales_info.txt 
    123,华为Mate10,31,999,20,2019-04-26
    456,华为Mate30,31,2999,30,2019-04-26
    456,华为Mate30,31,2999,30,2019-04-26
    789,小米5,31,800,20,2019-04-26
    1235,小米6,31,900,100,2019-04-26
    4562,OPPO Findx,31,3900,50,2019-04-26
    [abc]$ 
    

    导入、查询:

    hive> load data local inpath 'sales_info.txt' overwrite into table sales_info partition(dt='2019-04-26') ;
    Loading data to table gdm.sales_info partition (dt=2019-04-26)
    Moved: 'hdfs://ns1/abc/sales_info/dt=2019-04-26/sales_info.txt' to trash at: hdfs://ns1/abc/.Trash/Current
    Partition gdm.sales_info{dt=2019-04-26} stats: [numFiles=1, numRows=0, totalSize=228, rawDataSize=0]
    OK
    Time taken: 0.457 seconds
    hive> select *  from sales_info;
    OK
    sku_id	sku_name	category_id3	price	sales_count	dt
    123	华为Mate10	31	999.0	20	2019-04-26
    456	华为Mate30	31	2999.0	30	2019-04-26
    456	华为Mate30	31	2999.0	30	2019-04-26
    789	小米5	31	800.0	20	2019-04-26
    1235	小米6	31	900.0	100	2019-04-26
    4562	OPPO Findx	31	3900.0	50	2019-04-26
    Time taken: 0.046 seconds, Fetched: 6 row(s)
    hive> 
    

    实例3:

    建表语句(带分区字段,用'\t'分隔字段):

    CREATE TABLE `sales_info`(
    `sku_id` string COMMENT '商品id', 
    `sku_name` string COMMENT '商品名称', 
    `category_id3` string COMMENT '三级分类id', 
    `price` double COMMENT '销售价格', 
    `sales_count` bigint COMMENT '销售数量'
    )
    COMMENT '商品销售信息表'
    PARTITIONED BY(
    `dt` string)
    ROW FORMAT DELIMITED 
    FIELDS TERMINATED BY '\t' 
    NULL DEFINED AS '' 
    STORED AS TEXTFILE
    LOCATION
    'hdfs://ns1/abc/sales_info'

    数据文本(第一种):

    [abc]$ cat sales_info.txt 
    123\t华为Mate10\t31\t999\t20
    456\t华为Mate30\t31\t2999\t30
    789\t小米5\t31\t800\t20
    1235\t小米6\t31\t900\t100
    4562\tOPPO Findx\t31\t3900\t50
    [abc]$ 
    

    导入后查询:

    hive> select  *  from sales_info;
    OK
    sku_id	sku_name	category_id3	price	sales_count	dt
    123\t华为Mate10\t31\t999\t20	NULL	NULL	NULL	NULL	2019-04-26
    456\t华为Mate30\t31\t2999\t30	NULL	NULL	NULL	NULL	2019-04-26
    789\t小米5\t31\t800\t20	NULL	NULL	NULL	NULL	2019-04-26
    1235\t小米6\t31\t900\t100	NULL	NULL	NULL	NULL	2019-04-26
    4562\tOPPO Findx\t31\t3900\t50	NULL	NULL	NULL	NULL	2019-04-26
    Time taken: 0.89 seconds, Fetched: 5 row(s)
    hive> 
    

    数据文本(第二种,用Tab键分隔字段):

    导入后查询:

    hive> select  *  from sales_info;
    OK
    sku_id	sku_name	category_id3	price	sales_count	dt
    123 华为Mate10  31  999 20	NULL	NULL	NULL	NULL	2019-04-26
    456 华为Mate30  31  2999    30	NULL	NULL	NULL	NULL	2019-04-26
    456 华为Mate30  31  2999    30	NULL	NULL	NULL	NULL	2019-04-26
    789 小米5   31  800 20	NULL	NULL	NULL	NULL	2019-04-26
    1235    小米6   1   900 100	NULL	NULL	NULL	NULL	2019-04-26
    4562    OPPO Findx  31  900 50	NULL	NULL	NULL	NULL	2019-04-26
    Time taken: 0.049 seconds, Fetched: 6 row(s)
    hive> 
    

    都是错误的,为啥呢?

    存放数据文件的目录:

    hive> dfs -ls hdfs://ns1/abc/sales_info/dt=2019-04-26;
    Found 1 items
    -rwxr-xr-x   3 a a        187 2019-04-27 17:08 hdfs://ns1/abc/sales_info/dt=2019-04-26/sales_info.txt
    hive> 
    

    注意:

    1 建表语句中,'STORED AS TEXTFILE' 很重要(select * 才能看到结果),如果是lzo或者orc压缩格式,select * 没结果,但是select count(*) 正确,而且hdfs下的目录也有该文件,

    比如:

    CREATE TABLE `sales_info`(
      ...
      )
      COMMENT '商品销售信息表'
    PARTITIONED BY ( 
      `dt` string )
    ROW FORMAT DELIMITED 
      FIELDS TERMINATED BY '\t' 
      NULL DEFINED AS '' 
    STORED AS INPUTFORMAT 
      'com.hadoop.mapred.DeprecatedLzoTextInputFormat' 
    OUTPUTFORMAT 
      'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
    LOCATION
      'hdfs://ns1/abc/sales_info'

    2 导入分区表时,分区字段是否写在数据文件中均可以。

    实例:

    [...1030temp]$ ll
    total 4
    -rw-rw-rw- 1 abc abc 192 Nov 14 19:54 test2.log
    //直接在linux终端运行报错,需要切换到hive
    [abc@BJHTYD-Client-28-138 1030temp]$ load data inpath 'hdfs://...abc/tmp.db/test_1030/test2.log' overwrite into table  tmp.test_1030_external_dt partition (dt='2019-11-11') ;
    -bash: syntax error near unexpected token `('
    
    //也报错,需要把表名带单引号
    hive> load data local  inpath test2.log overwrite into table  tmp.test_1030_external_dt partition (dt='2019-11-11') ;
    MismatchedTokenException(27!=320)
    	at org.antlr.runtime.BaseRecognizer.recoverFromMismatchedToken(BaseRecognizer.java:617)
    	at org.antlr.runtime.BaseRecognizer.match(BaseRecognizer.java:115)
    	at org.apache.hadoop.hive.ql.parse.HiveParser.loadStatement(HiveParser.java:1897)
    	at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
    FAILED: ParseException line 1:24 mismatched input 'test2' expecting StringLiteral near 'inpath' in load statement
    //则正确
    hive> load data local  inpath 'test2.log' overwrite into table  tmp.test_1030_external_dt partition (dt='2019-11-11') ;
    Loading data to table tmp.test_1030_external_dt partition (dt=2019-11-11)
    Partition tmp.test_1030_external_dt{dt=2019-11-11} stats: [numFiles=1, numRows=0, totalSize=192, rawDataSize=0]
    OK
    Time taken: 0.931 seconds
    hive> exit;
    [abc@BJHTYD-Client-28-138 1030temp]$ ll
    total 4
    -rw-rw-rw- 1 abc abc 192 Nov 14 19:54 test2.log
    [abc@BJHTYD-Client-28-138 1030temp]$ 
    
    hive> dfs -du -h hdfs://...abc/tmp.db/test_1030_external_dt; //导入前没有
    hive> dfs -du -h hdfs://...abc/tmp.db/test_1030_external_dt; //导入后多个这个文件
    192  hdfs://...abc/tmp.db/test_1030_external_dt/dt=2019-11-11
    
    //再add partition 则能正常查询
    
    [... 1030temp]$ ll
    total 4
    -rw-rw-rw- 1 abc abc 192 Nov 14 19:54 test2.log  //原文件依然存在

     

    展开全文
  • 前两天在做一个不算任务的任务,用shell脚本将数据库中的数据导出到文件,在万能的百度上了一些资料,自己亲手实践了一番,脚本语言又有长进。从数据库导出数据到TXT文件,完全OK,那么从TXT文本导入到数据库又...

    如果是txt文件的数据导入oracle中,数据量大的话用pl/sql会卡死,那么就要用到sqlload命令。

    前两天在做一个不算任务的任务,用shell脚本将数据库中的数据导出到文件,在万能的百度上找了一些资料,自己亲手实践了一番,脚本语言又有长进。从数据库导出数据到TXT文件,完全OK,那么从TXT文本导入到数据库又怎样操作呢?于是又上万能的度娘,又亲手实践了一上午,发现网上的不少例子很好,但是不尽详细,还是要靠自己理解,因此将学习的经验和结果记录如下。

    1.Oracle导出到TXT文本

    从Oracle导出数据到TXT文本,是很容易的,这里用到spool,通过spool 命令,可以将select 数据库的内容写到文件中,通过在sqlplus设置一些参数,使得按指定方式写到文件中。

    常规使用spool方法,将set的一些命令和spool,select等放入.sql脚本中,然后再sqlplus中运行该脚本。

    例如以下设置就是常用的模式,只要将文件名和SQL替换成你自己的就可以正常使用。

    set line 1000         --设置行的长度
    set pagesize 0        --输出不换页
    set feedback off      --默认的当一条sql发出的时候,oracle会给一个反馈,比如说创建表的时候,如果成功命令行会返回类似:Table created的反馈,off后不显示反馈
    set heading off       --不显示表头信息
    set trimspool on      --如果trimspool设置为on,将移除spool文件中的尾部空
    set trims on          --去掉空字符
    set echo off;       --显示start启动的脚本中的每个sql命令,缺省为on
    set colsep ','         --设置分隔符
    --set termout off        --不在屏幕上显示结果
    spool db1.txt          --记录数据到db1.txt
    select * from UCR_PARAM.STUDENT2_TEMP;  --导出数据语句
    spool off              --收集完毕
    exit

    使用表student2来做测试,student2的表结构如下:

    SQL> desc student2;
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     SID                                       NOT NULL NUMBER(10)
     SNAME                                     NOT NULL VARCHAR2(20)
     SAGE                                      NOT NULL NUMBER
     SSEX                                      NOT NULL CHAR(2)
     SADDRESS                                  NOT NULL VARCHAR2(20)
     SBIRTH                                             DATE
     REMARK                                             VARCHAR2(200)
     GRADUATION_DATE                                    DATE

    表内的数据:REMARK和GRADUATION_DATE字段为null

    下面将使用标准shell脚本连接数据库并将数据导出到TXT,通常的步骤是:

    1.在shell脚本设置好对应的TXT文件路径及文件名,SQL语句,log路径等。

    2.sqlplus连接数据库,这里使用-s简单模式,连接上以后不输出任何内容,这样可以直接使用spool导出结果到文件

    3.设置导出的格式,字段,空格等

    注意,以下脚本set部分虽然有去空格,但是空格任然存在,最好在结束使用命令将所有空白字符去除

    #去除文件开头的空格及中间的空白字符

    #去除文件开头的空格及中间的空白字符
    sed -i 's/ //g' ${work_path}/stu_${file_date}.txt

    完整的 dbout.sh,前面为注释和举例,核心功能从 sqlplus开始

    #!/usr/bin/bash
    
    #多行注释
    :<<BLOCK
    set line 1000         --设置行的长度
    set pagesize 0        --输出不换页
    set feedback off      --默认的当一条sql发出的时候,oracle会给一个反馈,比如说创建表的时候,如果成功命令行会返回类似:Table created的反馈,off后不显示反馈
    set heading off       --不显示表头信息
    set trimspool on      --如果trimspool设置为on,将移除spool文件中的尾部空
    set trims on          --去掉空字符
    set echo off;       --显示start启动的脚本中的每个sql命令,缺省为on
    set colsep '|'         --设置分隔符
    --set termout off        --不在屏幕上显示结果
    spool $filename          --记录数据到db1.txt
    $sqlinfo2;  --导出数据语句
    spool off              --收集完毕
    exit
    BLOCK
    #可以在这里拼接语句,用|或;,但是逗号,拼接','不行
    #逗号拼接可以在后面的sqlplus中设置列分隔符:set colsep ','
    sqlinfo="select  B.ORDER_ID||';'||
                    B.PEER_ORDER_ID||';'||
                    B.BUSI_CODE||';'||
                    B.ACCOUNT_CODE||';'||
                    A.TRADE_FEE||';'||
                    A.RECEIPT_FEE||';'||
                    A.RATE_FEE||';'||
                    A.BUSI_CODE||';'||
                    A.PAY_STATUS||';'||
                    to_char(A.CHECK_DATE, 'yyyy-mm-dd') 
                    from ucr_cen.UPG_ORDER_PAY_DETAIL A,
                    ucr_cen.I_UPG_ORDER_TMP B
              WHERE B.MERCHANT_ID = '510915'
                    AND B.PEER_ORDER_ID != '-1'
                    AND A.CHECK_STATUS IN ('0','2','3')
                    AND A.STATE = 'U'
                    AND A.PAY_STATUS = '1'
                    AND A.CHECK_DATE BETWEEN TRUNC(SYSDATE-1) AND TRUNC(SYSDATE)-1/86400 
                    AND A.ORDER_ID = B.ORDER_ID;"
    
    
    #以上为举例和注释,核心功能从这里开始
    sqlinfo2="select SID,SNAME,SAGE,to_char(GRADUATION_DATE,'yyyy-mm-dd'),SSEX,SADDRESS,REMARK,to_char(SBIRTH,'yyyy-mm-dd') from UCR_PARAM.STUDENT2;" 
    #sqlinfo2="select SID,SNAME,SAGE,to_char(GRADUATION_DATE,'yyyy-mm-dd'),SSEX,SADDRESS,to_char(SBIRTH,'yyyy-mm-dd'),REMARK from UCR_PARAM.STUDENT2;"
    #不设置拼接时,使用逗号分隔符 set colsep ',' ,当该列为空时会返回占位的空白字符,一般此种情况用于后续将TXT文本直接导入数据库方便
    start_time=`date +%Y%m%d%H%M%S`
    work_path=/home/billing/user/zhf/test
    DbCon=用户名/密码@所属组
    file_date=`date +%Y%m%d`
    filename=${work_path}/stu_${file_date}.txt;
    
    echo "----------------  start to exec job   $start_time "
    echo "----------------  sqlinfo = $sqlinfo2 "
    #echo "----------------  start to exec job   $start_time ">>${work_path}/$start_time.log
    #echo "----------------  sqlinfo = $sqlinfo2 ">>${work_path}/$start_time.log
    echo "----------------  connect to $DbCon and try to exec sql..."
    #echo "----------------  connect to $DbCon and try to exec sql...">>${work_path}/$start_time.log
    
    
    sqlplus -S $DbCon<< EndSql
    set line 1000
    set pagesize 0
    set feedback off
    set heading off
    set trimspool on
    set trims on
    set echo off
    set colsep ','
    --set termout off
    spool $filename
    $sqlinfo2
    spool off
    exit
    EndSql
    #去除文件开头的空格及中间的空白字符
    sed -i 's/ //g' ${work_path}/stu_${file_date}.txt
    end_time=`date +%Y%m%d%H%M%S`
    echo "----------------  cmd end , please check te result $end_time"
    #echo "----------------  cmd end , please check te result $end_time">>${work_path}/$start_time.log

    导出的结果,注意,两个逗号,,分隔的字段没有内容即为null值 ,此处该两个null字段在中间,不在结尾,后面将看另一种情况:即null字段在结尾的情况下

    生成文件暂命名为:stu_20190810.txt

    1,lily,24,,M,Shanxi,,1993-01-14
    2,kity,17,,WM,Shanxi,,2001-01-14
    3,bobo,27,,WM,Shanxi,,1991-01-14
    4,anna,29,,WM,Shanxi,,1989-01-14

    2.从TXT文本导入Oracle数据表

    从TXT文本文件导入数据库其实也简单,格式依然是固定sqlldr的控制文件

    我们先新建一张表student3

    create table UCR_PARAM.STUDENT3 as select * from UCR_PARAM.STUDENT2 where 1=2;

    --将字段GRADUATION_DATE修改为varchar类型,因为该字段为null,在插入时,date转换不接受null,因此用varchar来接收

    alter table UCR_PARAM.STUDENT3 modify GRADUATION_DATE varchar2(14);

    student3表结构如下:

    打开一个.ctl文件,插入以下内容

    vi tb_sqlldr.ctl

    load data                 
    infile 'stu_20190810.txt' --数据来源文本 
    APPEND into table ucr_param.STUDENT3-- 原先的表有数据 就加在后面
    --INSERT into table ucr_param.STUDENT3-- 装载空表 如果原先的表有数据 sqlloader会停止 默认值
    --REPLACE into table ucr_param.STUDENT3-- 原先的表有数据 原先的数据会全部删除
    --TRUNCATE into table ucr_param.STUDENT3-- 指定的内容和replace的相同 会用truncate语句删除现存数据 
    fields terminated by "," --4、字段终止于X'09',是一个制表符(tab) (id,name) --定义对应的字段名称,注意顺序
    TRAILING NULLCOLS --如要导入源文件此列内容为空,在导入到数据库表中,此列内容就是null
    --读取的TXT字段对应数据库中的字段,注意顺序要与TXT字段顺序一直
    (SID	"to_number(:SID)" ,
    SNAME 	,
    SAGE	"to_number(:SAGE)" ,
    GRADUATION_DATE "NVL(:GRADUATION_DATE, '未知')",--"NVL(to_date(:GRADUATION_DATE, 'yyyy-mm-dd'),'NULL')", date为null时插入行不通,date函数不接受null值,因此修改表结构
    SSEX	,
    --NULLIF (expr1, expr2),若expr1和expr2相等,返回NULL;不相等,等返回expr1
    SADDRESS "NULLIF(:SADDRESS,'NULL')",
    --NVL(expr1,expr2),若expr1为null, 返回expr2; 不为null,返回expr1。  注意:两者类型要一致
    REMARK "NVL(:REMARK,'NULL')",
    SBIRTH	date"yyyy-mm-dd" ) -- coulmun

    注意,此处GRADUATION_DATE和REMARK字段为null,那么这一句就很重要 ,否则sql loader 读取到null值,插入时会报错

    TRAILING NULLCOLS --如要导入源文件此列内容为空,在导入到数据库表中,此列内容就是null

    date类型的数据插入时可以使用两种方式插入:

    SBIRTH    date"yyyy-mm-dd" 或 SBIRTH    "to_date(:SBIRTH, 'yyyy-mm-dd')"

    注意,读取的字段内容为空的,加入该字段判断:

    --NVL(expr1,expr2),若expr1为null, 返回expr2; 不为null,返回expr1。  注意:两者类型要一致
    REMARK "NVL(:REMARK,'NULL')"

    新建一个shell脚本调用该控制文件,dao.sh

    #!/bin/ksh 
    #注意,顶行是固定格式
    sqlldr userid=数据库名/密码@所属库 control=tb_sqlldr.ctl

    调用:dao.sh

    结果验证:

    另一种情况,导出的TXT文件null字段刚好在行尾

    放开dbout.sh的另一种sqlinfo2的情况

    生成的TXT文件结果:行尾有逗号

    1,lily,24,,M,Shanxi,1993-01-14,
    2,kity,17,,WM,Shanxi,2001-01-14,
    3,bobo,27,,WM,Shanxi,1991-01-14,
    4,anna,29,,WM,Shanxi,1989-01-14,

    调整ctl控制文件的字段顺序,也可以导入:

    load data                 
    infile 'stu_20190810.txt' --数据来源文本 
    APPEND into table ucr_param.STUDENT3-- 原先的表有数据 就加在后面
    --INSERT into table ucr_param.STUDENT3-- 装载空表 如果原先的表有数据 sqlloader会停止 默认值
    --REPLACE into table ucr_param.STUDENT3-- 原先的表有数据 原先的数据会全部删除
    --TRUNCATE into table ucr_param.STUDENT3-- 指定的内容和replace的相同 会用truncate语句删除现存数据 
    fields terminated by "," --4、字段终止于X'09',是一个制表符(tab) (id,name) --定义对应的字段名称,注意顺序
    TRAILING NULLCOLS --如要导入源文件此列内容为空,在导入到数据库表中,此列内容就是null
    (SID    "to_number(:SID)" ,
    SNAME   ,
    SAGE    "to_number(:SAGE)" ,
    GRADUATION_DATE "NVL(:GRADUATION_DATE, '未知')",--"NVL(to_date(:GRADUATION_DATE, 'yyyy-mm-dd'),'NULL')",
    SSEX    ,
    --NULLIF (expr1, expr2),若expr1和expr2相等,返回NULL;不相等,等返回expr1
    SADDRESS "NULLIF(:SADDRESS,'NULL')",
    SBIRTH  "to_date(:SBIRTH, 'yyyy-mm-dd')" ,
    --NVL(expr1,expr2),若expr1为null, 返回expr2; 不为null,返回expr1。  注意:两者类型要一致
    REMARK "NVL(:REMARK,'NULL')") -- coulmun

    注意,如果表字段数据类型数长字符串,大于255时,在导入的时候需要指定导入字段的最大长度,否则会因为导入字段超过255时超长失败。导入的字段指定长度如下,且要使用char定长类型

    (COLL_HOST char(32),
    WARN_INFO       char(2000),
    UPDATE_TIME     char(32)
    )

     

    展开全文
  • PLSQL导入Excel遇到预览不到数据的解决办法

    今天,从Excel导入Oracle一些数据,在导入的过程中,遇到一个问题,Excel里面有好几万条数据,但是通过PLSQL导入向导导入Excel文件之后,在PLSQL里却预览不到数据行,只能看见标题行


    之前也遇到一些问题,于是换种方法,将Excel另存为txt文件

    参考资料:http://jingyan.baidu.com/album/3d69c551ac7bddf0cf02d791.html

    结果也是一样,预览不到数据


    网上搜了搜,也没有找到相关的帖子,不过发现有另外一种将Excel数据通过PLSQL导入到Oracle的方法

     1、在PLSQL  Developer的sql  window里输入select  *  from  test  for  update;  
     2、按F8执行  
     3、打开锁,  再按一下加号.  鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。

    参考资料:http://www.cnblogs.com/lemonme/articles/1561793.html

    只是,如果有好几万条数据,这样的方法来回粘贴也挺费劲的

    于是,只好继续寻找Excel通过PLSQL直接导入数据遇到的问题

    后来,发现Excel第一行居然是合并了两行作为标题行,另外发现,数据列中有一列数据全部是空的


    把合并的标题行拆开,删除多余的标题行,然后删除空的数据列,重新使用PLSQL直接导入Excel,就成功了!

    展开全文
  • 解决静态库文件导入 找不到问题

    千次阅读 2016-01-19 09:42:03
    记录一下:在导入libBPush.a文件时候,对照的官方的demon都正常的操作,报错类似于 Undefined symbols for architecture armv7:  "XXXXXXXXXX", referenced from:  NormalizeDir(std::string&) in ...

    记录一下:在导入libBPush.a文件时候,对照的官方的demon都正常的操作,报错类似于

    Undefined symbols for architecture armv7:


      "XXXXXXXXXX", referenced from:


          NormalizeDir(std::string&) in libBPush.a(XXXXX.o)

    .

    .

    .


    这样的错误,首先这是找不到.a文件里的方法实现 报的错误。 可以尝试删了重新添加;


    如果还是这样,再检查FrameWorkPath 和:LirarySearchPath 这些删除没有作用的路径,可以自己添加;


    这里要记录一下 other Link flags 的设置:它是填写编译参数的一项设置 一般会有-objc ,-all_load 

    -force_load..


     -objct :加了这个参数后,链接器就会把静态库中所有的Objective-c类和分类都加载到最后的可执行文件中

     -all_load  : 会让链接器把所有找到的目标文件都加载到可执行文件中,但是千万不要随便使用这个参数!假如你使用了不止一个静态库文件,然后又使用了这个参数,那么你很有可能会遇到ld: duplicate symbol错误 会造成一些冲突,因为不同的库文件里面可能会有相同的目标文件,所以建议在遇到-ObjC失效的情况下使用-force_load参数


    -force_load : 所做的事情跟-all_load其实是一样的,但是-force_load需要指定要进行全部加载的库文件的路径,这样的话,你就只是完全加载了一个库文件,不影响其余库文件的按需加载

    使用-force_load 时候 现在other link flags中添加-force_load; 再 给上所要的.a 文件的路径.

    最好在projects和targets中都配置



    展开全文
  • 实战Hive本地文件系统导入数据

    万次阅读 2019-01-06 14:36:56
    最近了解大数据Hadoop相关内容,正好项目中需要与hive 数据仓库交互,前提需要导入数据到Hive中,下面来看下本地文件系统导入hive的实战过程。 正文 四种方式导入数据到Hive 表 从本地文件系统导入数据到Hive 表 ...
  • hive ,从hdfs把数据文件load导入到

    万次阅读 2019-04-27 18:48:21
    hive> load data inpath 'hdfs://ns1/abc/sales_info/hello/sales_info.txt' ...原数据文件(已经存在了,是从原路径移动了新路径下): 如果从本地导入后本地的原数据文件依然存在,相当于复制过去;...
  • android导入项目找不R文件,解决方法

    千次阅读 2013-11-27 10:36:58
    将android工程导入eclipse中找不到 R文件的解决方法 情况一:千万不要重启Eclipse、也不自己创建R.java 类文件右击你的工程(项目)——>Android Tools——>Fix Project Properties 将会再次创建出R文件数据不丢失 ...
  • csdn上面的数据导入五花八门,大多是在特定条件实行的数据导入,我在学习机器学习分类算法实现中发现csdn上面有很多dat数据文件,所以想要利用这些dat数据文件,但知道如何导入,经过一番摸索,有一种方法可以完全...
  • 从csv文件导入数据到postgres

    千次阅读 2013-05-22 17:06:57
    语法: copy tablename [(columname1,columname2,,,,)] from 'x:/../**.csv' ... 从数据库复制数据粘贴csv文件中后,是逗号分隔形式的一列数据,在粘贴选项中选择使用文本导入向导,选择相应选项(分隔符、字
  • 从文本文件导入数据到数据库表

    千次阅读 2016-06-20 16:14:28
    Oracle最近一直在使用常用数据库的数据导入,这里把已经用到的导入命令先简要列举一下:SQL Server数据导入不介绍每一个option的具体意义,如果你用到了,请直接MSDN查看具体option的意义,此处不再赘述!...
  • sqlserver导入CSV文件数据

    千次阅读 2019-09-10 16:18:17
    导入数据,打开导入页面 数据源选择平面文件源 点击浏览按钮选择要导入的文件 旁边的列,高级,预览根据自己情况选择设置,下一步; 目标选择Microsoft OLE DB Provider for SQL Server,服务器我这边选择自己...
  • MySQL使用load data local infile 从文件导入数据比insert语句要快,MySQL文档上说要快20倍左右。 但是这个方法有个缺点,就是导入数据之前,必须要有文件,也就是说从文件中导入。这样就需要去写文件, 以及文件...
  • 导入excel文件,第二次导入数据怎样覆盖之前导入数据<前提是在这两个数据的名称一样>
  • 文本数据导入HBASE库找不到类com/google/common/collect/Multimap  打算将文本文件导入HBASE库,在运行命令的时候找不到类com/google/common/collect/Multima [hadoop@hadoop1 lib]$ hadoop jar /...
  • 从Excel文件导入数据到SQL Server 2012

    千次阅读 2016-05-19 15:37:55
    1.启动SQL Server Management Studio ...Server 2012" alt="从Excel文件导入数据到SQL Server 2012" src="http://s12.sinaimg.cn/mw690/001ZkYorty6LUSRk8DV3b&690"> 2.在弹出的对话框中,将
  • 在plsql里面导入pde文件导入到一般的时候卡住动了进度条前进了,在表空间的文件也没有继续增大了。过了好长时间一直停在那,电脑和plsql都没有卡死。非常急有没有大神帮帮我啊,就这么多财产了全给了。
  • 一、在logstash的bin目录下创建logstash.conf文件: input { file { path =&amp;gt; [&quot;C:\Users\shaozhuquan\Desktop\test.csv&quot;] start_position =&amp;gt; &quot;beginning&...
  • layui 上传文件——批量导入数据UI

    千次阅读 2018-10-17 16:12:41
    点击【批量导入】按钮调用js脚本importData(config)就可以实现数据上传服务器。 脚本: /*** * 批量导入 * config.downUrl 下载模板url * config.uploadUrl 上传文件url * config.msg * config.done 上传...
  • 就是把生产上的mongodb数据使用mongoexport导出了一个.json文件用于本地做分析使用,里面有将近60MB的数据,导出没问题,但是当使用./mongoimport -d 数据库名称 -c 表名称 文件路径+名称,这个导入指令导入到本地的...
  • 将会再次创建出R文件数据不丢失     情况二:    工程中没有R 文件,主要的原因是我们的工程没有编译,所以我们要手动编译导入的工程。<b
  • Hive导入数据 No files matching path file

    千次阅读 2019-08-09 10:21:18
    记录一次Hive导入数据找不到文件的错误 org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: SemanticException Line 1:23 Invalid path ''/tmp/a2e5df53-fe96-4989-8ed5-4b...
  • 问题:多个excel文件导入(上传) 思路:由于文件选择只能单个文件...开启线程后,将陆续上传的文件加入队列中,只要队列中有数据结束线程,直到队列中的数据全部执行完也就是前端上传的文件全部导入到数据库中
  • ELK生态之Logstash导入数据到Elasticsearch; 数据源:txt格式文件,内容为json或json数组; Elasticsearch和Logstash版本:5.6.1; 前提环境:Elasticsearch单机或集群;Logstash客户端; 实践 txt文件内容: ...
  • 我们常常导入数据!mysql有一个高效导入方法,那就是load data infile 下面来看案例说明   基本语法: load data [low_priority] [local] infile 'file_name txt' [replace | ignore] into table tbl_name ...
  • 把hive中的数据导入到hdfs或者本地文件的方式 1、通过insert...directory方式导出数据到本地文件 insert overwrite local directory '/opt/datas/hive/exp_hive' select * from emp ; insert overwrite local ...
  • 这两种方法我都使用了,但是都导入不成功,原因都是时间类型的问题,这两天搞得我头疼,我无论如何修改ctl文件或是excel表格中日期类型的数据 就是导入不进去。第三天我使用第二种方法 并且修改我系统的时间格式最后...
  • 当我们使用mysql导入外部数据时(如Excel表),有时会出现如下的错误问题,即找不到64位access驱动。为了解决这个问题,我们需要下载相应的驱动,通过下图中的点击此链接即可进入下载页面...
  • logstash导入数据到Elasticsearch

    千次阅读 2019-04-16 19:52:06
    刚开始的时候,博主导入数据用的是bulk这个方法,但是这个方法一方面是导入方便,一方面是对于数据量有限制。既然咱们搭建的是ELK,那么就来见识下logstash吧。 博主这里的ELK全部是6.2.4版本。 二、logstash的...
  • Matlab文件数据导入与导出

    万次阅读 2017-06-01 16:20:46
    Matlab文件数据导入与导出 本文来源于网上 在编写一个程序时,经常需要从外部读入数据,或者将程序运行的结果保存为文件。MATLAB使用多种格式打开和保存数据。本章将要介绍MATLAB中文件的读写和数据导入导出...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 637,411
精华内容 254,964
关键字:

导入数据找不到文件