我有以下SQL語句:插入從選擇(Teradata數據)
select cast (count(*) as bigint) from
(SELECT oldtable.id,oldtable.day,newtable.newid from oldtable
left outer join newtable on oldtable.day between newtable.FROM_DAY
and newtable.TO_DAY and oldtable.id = newtable.id) a
這導致4.5十億
,但是當我這樣說:
INSERT INTO AnotherTable
(id, day, newid)
SELECT oldtable.id,oldtable.day,newtable.newid from oldtable
left outer join newtable on oldtable.day between newtable.FROM_DAY
and newtable.TO_DAY and oldtable.id = newtable.id
它只是插入3億條記錄(舊錶包含45億條記錄,新增4.3億條記錄)。
爲什麼?
AnotherTable的definiton:
CREATE MULTISET TABLE AnotherTable ,NO FALLBACK ,
NO BEFORE JOURNAL,
NO AFTER JOURNAL,
CHECKSUM = DEFAULT,
DEFAULT MERGEBLOCKRATIO
(
id INTEGER NOT NULL,
day DATE FORMAT 'YYYY-MM-DD',
newid INTEGER NOT NULL
)
PRIMARY INDEX (id)
PARTITION BY RANGE_N(day BETWEEN DATE '2000-09-20' AND DATE '2030-02-15' EACH INTERVAL '1' DAY);
我做了如下檢查:
SELECT oldtable.id,oldtable.day,newtable.newid from oldtable
left outer join newtable on oldtable.day between newtable.FROM_DAY and newtable.TO_DAY
and oldtable.id = newtable.id
where newtable.newid is null
這導致0的記錄,所以外連接沒有必要的,我只是在這裏使用它來演示該記錄號碼是不同的,但它不應該是
是否有可能對'newid'有非NULL約束?由於「left outer join」,這可能是NULL。 – 2013-04-29 13:01:50
我提出了以下檢查: 'SELECT oldtable.id,oldtable.day,newtable.newid從oldtable 左外連接newtable的上newtable.FROM_DAY 和newtable.TO_DAY和oldtable.id = newtable的之間oldtable.day。id where newtable.newid is null' 它導致了0條記錄,所以根本不需要外部連接,我只是在這裏用它來證明記錄號是不同的,但它不應該是 – 2013-04-29 13:05:55
您是否收到任何來自數據庫服務器的錯誤消息?是否有任何磁盤存儲限制問題?如果它繼續失敗,可能嘗試從SQL select中生成插入語句,然後再運行插入腳本。 – 2013-04-29 13:16:16