提交 29bf1d53 编写于 作者: M Ming LI 提交者: GitHub

Fixed 'COPY table FROM file ON SEGMENT' bug: multiple blocks file only read the first block (#2869)

This bug is caused by:
For COPY FROM ON SEGMENT, on QE, process the data stream (empty) dispatched from QD at first, then re-do the same workflow to read and process the local segment data file. Before redo, all flags need to be reset to initial values too. However we missed one flag.
上级 634858cd
......@@ -5114,6 +5114,7 @@ PROCESS_SEGMENT_DATA:
CopyFromProcessDataFileHeader(cstate, cdbCopy, &file_has_oids);
CopyInitDataParser(cstate);
no_more_data = false;
goto PROCESS_SEGMENT_DATA;
}
......
......@@ -3467,3 +3467,41 @@ select count(*) from
select l_suppkey, l_partkey, l_shipmode from heap_lineitem where
l_orderkey % (select max(nscaleperseg * 10) from opperfscale) = 5
) tmpt;
-- Test for COPY FROM/TO with mulitple blocks data file
DROP TABLE IF EXISTS LINEITEM;
CREATE TABLE LINEITEM ( L_ORDERKEY INTEGER NOT NULL,
L_PARTKEY INTEGER NOT NULL,
L_SUPPKEY INTEGER NOT NULL,
L_LINENUMBER INTEGER NOT NULL,
L_QUANTITY DECIMAL(15,2) NOT NULL,
L_EXTENDEDPRICE DECIMAL(15,2) NOT NULL,
L_DISCOUNT DECIMAL(15,2) NOT NULL,
L_TAX DECIMAL(15,2) NOT NULL,
L_RETURNFLAG CHAR(1) NOT NULL,
L_LINESTATUS CHAR(1) NOT NULL,
L_SHIPDATE DATE NOT NULL,
L_COMMITDATE DATE NOT NULL,
L_RECEIPTDATE DATE NOT NULL,
L_SHIPINSTRUCT CHAR(25) NOT NULL,
L_SHIPMODE CHAR(10) NOT NULL,
L_COMMENT VARCHAR(44) NOT NULL);
DROP TABLE IF EXISTS LINEITEM_1;
CREATE TABLE LINEITEM_1 (LIKE LINEITEM);
DROP TABLE IF EXISTS LINEITEM_2;
CREATE TABLE LINEITEM_2 (LIKE LINEITEM);
COPY LINEITEM FROM '@abs_srcdir@/data/lineitem.csv' WITH DELIMITER '|' CSV;
SELECT COUNT(*) FROM LINEITEM;
COPY LINEITEM TO '/tmp/lineitem.csv' CSV;
COPY LINEITEM TO '/tmp/lineitem_s<SEGID>.csv' ON SEGMENT CSV;
COPY LINEITEM_1 FROM '/tmp/lineitem.csv' CSV;
SELECT COUNT(*) FROM LINEITEM_1;
SELECT * FROM LINEITEM EXCEPT SELECT * FROM LINEITEM_1;
COPY LINEITEM_2 FROM '/tmp/lineitem_s<SEGID>.csv' ON SEGMENT CSV;
SELECT COUNT(*) FROM LINEITEM_2;
SELECT * FROM LINEITEM EXCEPT SELECT * FROM LINEITEM_2;
......@@ -14599,3 +14599,58 @@ select count(*) from
15061
(1 row)
-- Test for COPY FROM/TO with mulitple blocks data file
DROP TABLE IF EXISTS LINEITEM;
CREATE TABLE LINEITEM ( L_ORDERKEY INTEGER NOT NULL,
L_PARTKEY INTEGER NOT NULL,
L_SUPPKEY INTEGER NOT NULL,
L_LINENUMBER INTEGER NOT NULL,
L_QUANTITY DECIMAL(15,2) NOT NULL,
L_EXTENDEDPRICE DECIMAL(15,2) NOT NULL,
L_DISCOUNT DECIMAL(15,2) NOT NULL,
L_TAX DECIMAL(15,2) NOT NULL,
L_RETURNFLAG CHAR(1) NOT NULL,
L_LINESTATUS CHAR(1) NOT NULL,
L_SHIPDATE DATE NOT NULL,
L_COMMITDATE DATE NOT NULL,
L_RECEIPTDATE DATE NOT NULL,
L_SHIPINSTRUCT CHAR(25) NOT NULL,
L_SHIPMODE CHAR(10) NOT NULL,
L_COMMENT VARCHAR(44) NOT NULL);
DROP TABLE IF EXISTS LINEITEM_1;
CREATE TABLE LINEITEM_1 (LIKE LINEITEM);
DROP TABLE IF EXISTS LINEITEM_2;
CREATE TABLE LINEITEM_2 (LIKE LINEITEM);
COPY LINEITEM FROM '@abs_srcdir@/data/lineitem.csv' WITH DELIMITER '|' CSV;
SELECT COUNT(*) FROM LINEITEM;
count
-------
57190
(1 row)
COPY LINEITEM TO '/tmp/lineitem.csv' CSV;
COPY LINEITEM TO '/tmp/lineitem_s<SEGID>.csv' ON SEGMENT CSV;
COPY LINEITEM_1 FROM '/tmp/lineitem.csv' CSV;
SELECT COUNT(*) FROM LINEITEM_1;
count
-------
57190
(1 row)
SELECT * FROM LINEITEM EXCEPT SELECT * FROM LINEITEM_1;
l_orderkey | l_partkey | l_suppkey | l_linenumber | l_quantity | l_extendedprice | l_discount | l_tax | l_returnflag | l_linestatus | l_shipdate | l_commitdate | l_receiptdate | l_shipinstruct | l_shipmode | l_comment
------------+-----------+-----------+--------------+------------+-----------------+------------+-------+--------------+--------------+------------+--------------+---------------+----------------+------------+-----------
(0 rows)
COPY LINEITEM_2 FROM '/tmp/lineitem_s<SEGID>.csv' ON SEGMENT CSV;
SELECT COUNT(*) FROM LINEITEM_2;
count
-------
57190
(1 row)
SELECT * FROM LINEITEM EXCEPT SELECT * FROM LINEITEM_2;
l_orderkey | l_partkey | l_suppkey | l_linenumber | l_quantity | l_extendedprice | l_discount | l_tax | l_returnflag | l_linestatus | l_shipdate | l_commitdate | l_receiptdate | l_shipinstruct | l_shipmode | l_comment
------------+-----------+-----------+--------------+------------+-----------------+------------+-------+--------------+--------------+------------+--------------+---------------+----------------+------------+-----------
(0 rows)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册