Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RODBC Teradata复制表_R_Teradata_Rodbc - Fatal编程技术网

RODBC Teradata复制表

RODBC Teradata复制表,r,teradata,rodbc,R,Teradata,Rodbc,我使用带R的RODBC连接到Teradata 我正在尝试将一个大表示例(25GB)从只读数据库复制到工作数据库。这两个数据库在同一个数据库系统下,所以我只需要一个连接 我尝试了sqlQuery、sqlCopy和sqlCopyTable函数,但没有成功 sqlQuery sqlCopy(ch, query='SELECT * FROM READ_ONLY.EXAMPLE', destination = 'WORK.EXAMPLE') Error: cannot allocate

我使用带R的RODBC连接到Teradata

我正在尝试将一个大表
示例
(25GB)从
只读
数据库复制到
工作
数据库。这两个数据库在同一个数据库系统下,所以我只需要一个连接

我尝试了
sqlQuery
sqlCopy
sqlCopyTable
函数,但没有成功

sqlQuery

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

Error: cannot allocate vector of size 155.0 Mb
编辑:语法错误已按@dnoeth建议更正

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

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

sqlCopy

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

Error: cannot allocate vector of size 155.0 Mb
在创建新表之前,
sqlCopy
是否尝试先将数据复制到R的内存中?如果是这样的话,我如何绕过这一步,专门在Teradata服务器上工作?此外,即使使用选项
fast=F
,错误仍然存在

如果R的内存有问题,我尝试创建一个1000行的较小表:

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'
使用此命令,实际上创建了一个表,但它只包含列名,没有任何行

sqlCopyTable

sqlCopyTable(ch, 
         srctable = 'READ_ONLY.EXAMPLE',
         desttable = 'WORK.EXAMPLE')

Error in if (as.character(keys[[4L]]) == colnames[i]) create <- paste(create,  : 
  argument is of length zero
sqlCopyTable(ch,
srctable='READ_ONLY.EXAMPLE',
desttable='WORK.EXAMPLE')

if(as.character(key[[4L]])==colnames[i])create中出错sqlQuery中的语法不正确,缺少带数据的
选项:

CREATE TABLE WORK.EXAMPLE AS (SELECT * FROM READ_ONLY.EXAMPLE) WITH DATA;
注意,这将释放所有NOTNULL&CHECK约束和所有索引,导致第一列作为非唯一主索引

手动添加PI或切换到

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

如果
只读。示例
是一个表,您实际上需要一个精确的副本

谢谢大家!!后一个建议也很有用,但我刚刚了解到我使用的是“视图”而不是“表”,后一个命令不使用“视图”。我想知道sqlCopy和sqlCopyTable是否也因为这种视图/表的区别而失败。@Maarölli:
sqlCopy
似乎在本地卸载数据,然后插入到新表中。