GVKun编程网logo

通过SQLLDR将多个csv加载到一个表中

7

最近很多小伙伴都在问通过SQLLDR将多个csv加载到一个表中这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展c#–实体框架:将多个类映射到一个表、DjangoRestapi-如何

最近很多小伙伴都在问通过SQLLDR将多个csv加载到一个表中这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展c# – 实体框架:将多个类映射到一个表、Django Rest api - 如何将多个表中的数据插入到单个表中、linux 合并多个csv文件到一个文件,并且只保留一个表头、Linux环境下sqlldr一个csv文件等相关知识,下面开始了哦!

本文目录一览:

通过SQLLDR将多个csv加载到一个表中

通过SQLLDR将多个csv加载到一个表中

我正在使用SQL LOADER在一个表中加载多个csv文件。我发现的过程非常简单,就像

LOAD
  DATA 
  INFILE '/path/file1.csv'
  INFILE '/path/file2.csv'
  INFILE '/path/file3.csv'
  INFILE '/path/file4.csv'
  APPEND INTO TABLE TBL_DATA_FILE
    EVALUATE CHECK_CONSTRAINTS
    REENABLE DISABLED_CONSTRAINTS
    EXCEPTIONS EXCEPTION_TABLE
  FIELDS TERMINATED BY "," 
  OPTIONALLY ENCLOSED BY '"'
  TRAILING NULLCOLS
  ( 
    COL0,COL1,COL2,COL3,COL4
  )

但是我不想多次使用INFILE,因为如果我有1000个以上的文件,那么我必须在控制文件脚本中提及1000次INFILE。

所以我的问题是:是否有其他方法(如任何循环/任何* .csv)加载多个文件而不使用多个infile?

谢谢你

c# – 实体框架:将多个类映射到一个表

c# – 实体框架:将多个类映射到一个表

我认为这在nhiberate中是可能的,但我的问题是关于实体框架.

在我的数据库模型中 – 我无法修改 – 我有冗余列,我想存储在不同的类中.

示例:

public class DateParams
{
    public DateTime CreationDate { get; set; }
    public DateTime ModificationDate { get; set; }

    // some methods
}

public class Localization
{
    public String EnglishLabel { get; set; }
    public String frenchLabel { get; set; }

    // some methods
}

然后我会在我的一些模型中使用它们:

public class Account // Localization && DateParams 
{
    public int ID { get; set;  }
    public String Name { get; set; }

    public Localization Localization { get; set; }
    public DateParams DateParams { get; set; }
}

public class Lead // DateParams only
{
    public int ID { get; set; }
    public String Name { get; set; }

    public DateParams DateParams { get; set; }
}

我想要实现的是拥有这样的东西

public class LocalizationMap : EntityTypeConfiguration<Localization>
{
   public LocalizationMap()
   { 
        Property(e => e.EnglishLabel).HasColumnName("en");
        Property(e => e.frenchLabel).HasColumnName("fr");
   }
}

public class AccountMap : EntityTypeConfiguration<Account>
{
    public AccountMap()
    {            
        HasKey(x => x.ID);
        Property(e => e.Name).HasColumnName("Name");

        HasSubMapping(new LocalizationMap());
        HasSubMapping(new DateParamsMap());

        ToTable("Account");
    }
}

我可以使用继承来解决这个问题,但C#不允许多重继承.

解决方法

您可以通过使用复杂类型来实现此目的.这些映射到名为complextypeName_propertyName的表列,但可以通过在DbContext中覆盖OnModelCreating(DbModelBuilder modelBuilder)来更改此行为,如 Entity Framework – Reuse Complex Type中所述

对于你的例子:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.ComplexType<Localization>();

    modelBuilder.Entity<Account>().Property(x => x.Localization.EnglishLabel).HasColumnName("en");
    modelBuilder.Entity<Account>().Property(x => x.Localization.frenchLabel).HasColumnName("fr");
    // et cetera
}

Django Rest api - 如何将多个表中的数据插入到单个表中

Django Rest api - 如何将多个表中的数据插入到单个表中

如何解决Django Rest api - 如何将多个表中的数据插入到单个表中?

我写了一个查询,我只是从多个表中选择不同的列。 我正在学习 Django rest apis,我想编写一个 api,其中我的查询中的数据被插入到我的自定义转储表中。如果您能简短地回答我的问题,我将不胜感激。这是我的查询。

query= """ select pa.height,pa.weight,pa.muac,pa.tsf,pa.bmi,pa.nutritionist_comment,pa.create_date_app_side,hp.gender,hp.name,hp.regn_date_hospital,hp.dob,hp.city,hp.diagnosis_list_id,hp.diagnosis_stage,hg.first_name,hg.phone_number,hg.preferred_language_id
        from patientcounselling_anthropometric as pa
        join hospital_patient as hp on hp.uuid=pa.patient_uuid
        join hospital_guardian hg on hg.patient_uuid=hp.uuid """

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

linux 合并多个csv文件到一个文件,并且只保留一个表头

linux 合并多个csv文件到一个文件,并且只保留一个表头

linux合并多个csv文件到一个文件

cat a.csv <(tail +2 b.csv) > c.csv 

上面这条命令就是将a.csv和b.csv合并到一个c.csv文件,其中a.csv是全部数据,b.csv是从第2行到最后的数据( 命令为 <(tail +2 x.csv)  ),即去掉表头的数据。

>是覆盖写,>>是追加写

Linux shell scripts报错

另外shell脚本报错,Syntax error: "(" unexpected   ,是因为.sh 文件中执行错误

解决办法:

发现 ubuntu 模式使用的是 dash 模式,如果不想报错使用 bash 模式

可使用命令 bash xxx.sh   或者  将脚本第一行改为 #!/bin/bash,执行./example.sh也可以

 

 

Linux环境下sqlldr一个csv文件

Linux环境下sqlldr一个csv文件

本来是练习三思的书里一个sqlldr的小示例,就是把excel文件另存为csv后通过sqlldr加载到oracle数据库中。其目的本来是为了演示一

本来是练习三思的书里一个sqlldr的小示例,就是把excel文件另存为csv后通过sqlldr加载到oracle数据库中。其目的本来是为了演示一下csv文件的sqlldr以及csv文件中的字符串中存在逗号, 和双引号”的处理方法,,结果却引出了一个让我困惑了一阵子的问题,说大不大说小不小,反复测试了一番,怀疑到了一个点上,最后一查果然是那个样子,再测试就通过了,下面总结一下。
 
顺便记录一个:

三思说要创建scott这个经典的schema要运行$ORACLE_HOME/rdbms/admin/scott.sql这个脚本的内容,而实际上我并没找到这个脚本,找到并运行的是utlsampl.sql
 
excel是这样子的:

SMITH CLEAK 3904

ALLEN SALER,M 2891

WARD SALER,"S" 3128

KING PRESIDENT 2523


 

另存为''ldr_case2.csv''后内容是:

SMITH,CLEAK,3904
ALLEN,"SALER,M",2891
WARD,"SALER,""S""",3128
KING,PRESIDENT,2523

一切看起都挺正常的,然后将csv上传到Oracle所在的linux服务器上,写好control文件:

load data
infile ''ldr_case2.csv''
truncate into table bonus
fields terminated by '','' optionally enclosed by ''"''
(ename,job,sal)

执行加载后日志显示为失败:

Table BONUS, loaded from every logical record.
Insert option in effect for this table: TRUNCATE

  Column Name                  Position  Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
ENAME                              FIRST    *  ,  O(") CHARACTER
JOB                                  NEXT    *  ,  O(") CHARACTER
SAL                                  NEXT    *  ,  O(") CHARACTER

Record 1: Rejected - Error on table BONUS, column SAL.
ORA-01722: invalid number

Record 2: Rejected - Error on table BONUS, column SAL.
ORA-01722: invalid number

Record 3: Rejected - Error on table BONUS, column SAL.
ORA-01722: invalid number

Record 4: Rejected - Error on table BONUS, column SAL.
ORA-01722: invalid number

反复测试后,终于发现我把文件中的内容放到在linux下新建的文件中,加载OK,但是看起内容一样的csv怎么改都不行,我就怀疑看起来一样的东西是不是隐藏了什么不为我察觉的差异。带着这个疑问上网搜索了一下,果然有人遇到相同的问题,隐藏的差异就是csv文件行末藏了回车符。在linux下查看对比:
 
[oracle@nathan-rhel5 ~]$ cat -v ldr_case2.csv
SMITH,CLEAK,3904^M
ALLEN,"SALER,M",2891^M
WARD,"SALER,""S""",3128^M
KING,PRESIDENT,2523^M
[oracle@nathan-rhel5 ~]$ cat -v ldr_case2.dat0
SMITH,CLEAK,3904
ALLEN,"SALER,M",2891
WARD,"SALER,""S""",3128
KING,PRESIDENT,2523

原来作祟的就是文件行末的^M啊!!!

把csv文件转一下格式:
[oracle@nathan-rhel5 ~]$ dos2unix ldr_case2.csv
dos2unix: converting file ldr_case2.csv to UNIX format ...
[oracle@nathan-rhel5 ~]$ cat -v ldr_case2.csv
SMITH,CLEAK,3904
ALLEN,"SALER,M",2891
WARD,"SALER,""S""",3128
KING,PRESIDENT,2523

然后再重新加载一次数据成功了:
[oracle@nathan-rhel5 ~]$ vi ldr_case2.ctl

load data
infile ''ldr_case2.csv''
truncate into table bonus
fields terminated by '','' optionally enclosed by ''"''
(ename,job,sal)
[oracle@nathan-rhel5 ~]$ sqlldr scott/tiger control=ldr_case2.ctl

SQL*Loader: Release 10.2.0.1.0 - Production on Sat Feb 22 22:47:31 2014

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Commit point reached - logical record count 4
[oracle@nathan-rhel5 ~]$ vi ldr_case2.log

Control File:  ldr_case2.ctl
Data File:      ldr_case2.csv
  Bad File:    ldr_case2.bad
  Discard File:  none specified

(Allow all discards)

Number to load: ALL
Number to skip: 0
Errors allowed: 50
Bind array:    64 rows, maximum of 256000 bytes
Continuation:    none specified
Path used:      Conventional

Table BONUS, loaded from every logical record.
Insert option in effect for this table: TRUNCATE

  Column Name                  Position  Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
ENAME                              FIRST    *  ,  O(") CHARACTER
JOB                                  NEXT    *  ,  O(") CHARACTER
SAL                                  NEXT    *  ,  O(") CHARACTER

Table BONUS:
  4 Rows successfully loaded.

linux

关于通过SQLLDR将多个csv加载到一个表中的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于c# – 实体框架:将多个类映射到一个表、Django Rest api - 如何将多个表中的数据插入到单个表中、linux 合并多个csv文件到一个文件,并且只保留一个表头、Linux环境下sqlldr一个csv文件的相关信息,请在本站寻找。

本文标签: