我正在使用RODBC与R连接到Teradata。
我正在尝试将onDelete
数据库中的大表EXAMPLE
(25GB)复制到READ_ONLY
数据库。这两个数据库在同一个数据库系统下,所以我只需要一个连接。
我尝试了WORK
,sqlQuery
和sqlCopy
但未成功。
的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'
答案 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
是一个表,而您实际上想要一个精确的副本。