RODBC Teradata复制表

时间:2017-03-22 10:08:44

标签: r teradata rodbc

我正在使用RODBC与R连接到Teradata。

我正在尝试将onDelete数据库中的大表EXAMPLE(25GB)复制到READ_ONLY数据库。这两个数据库在同一个数据库系统下,所以我只需要一个连接。

我尝试了WORKsqlQuerysqlCopy但未成功。

的SQLQuery

编辑:根据@dnoeth的建议纠正语法错误。

sqlCopyTable

OR

CREATE TABLE WORK.EXAMPLE AS (SELECT * FROM READ_ONLY.EXAMPLE) WITH DATA;

我让后一种方法运行15小时,但没有完成复制。

sqlCopy

CREATE TABLE WORK.EXAMPLE AS (SELECT * FROM READ_ONLY.EXAMPLE) WITH NO DATA;
INSERT INTO WORK.EXAMPLE SELECT * FROM READ_ONLY.EXAMPLE;

sqlCopy(ch, query='SELECT * FROM READ_ONLY.EXAMPLE', destination = 'WORK.EXAMPLE') Error: cannot allocate vector of size 155.0 Mb 尝试在创建新表之前先将数据复制到R的内存中吗?如果是这样,我如何绕过此步骤并专门在Teradata服务器上工作?此外,即使使用选项sqlCopy,错误仍然存​​在。

如果R&#39的内存是问题,我尝试创建一个1000行的小表:

fast=F

使用此命令实际创建了一个表,但它只包含没有任何行的列名。

sqlCopyTable

sqlCopy(ch, 
    query='SELECT * FROM READ_ONLY.EXAMPLE SAMPLE 1000',
    destination = 'WORK.EXAMPLE')

Error in sqlSave(destchannel, dataset, destination, verbose = verbose,  : 
  [RODBC] Failed exec in Update
22018 0 [Teradata][ODBC Teradata Driver] Data is not a numeric-literal.
In addition: Warning message:
In odbcUpdate(channel, query, mydata, coldata[m, ], test = test,  :
  character data '2017-03-20 12:08:25' truncated to 15 bytes in column 'ExtractionTS'

1 个答案:

答案 0 :(得分:1)

sqlQuery中的语法不正确,缺少WITH DATA选项:

CREATE TABLE WORK.EXAMPLE AS (SELECT * FROM READ_ONLY.EXAMPLE) WITH DATA;

注意,这将松开所有NOT NULL&检查约束和所有索引,从而将第1列作为非唯一主索引。

手动添加PI或切换到

CREATE TABLE WORK.EXAMPLE AS READ_ONLY.EXAMPLE WITH DATA;

如果READ_ONLY.EXAMPLE是一个表,而您实际上想要一个精确的副本。