[
https://issues.apache.org/jira/browse/CASSANDRA-12794?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15772222#comment-15772222
]
Stefania commented on CASSANDRA-12794:
--------------------------------------
The fix consists in converting an empty string into a null value in the
converters. In my opinion a null value is more appropriate for an empty string,
rather than an arbitrary default value, such us a zero for integers for
example. CASSANDRA-12471 will then allow replacing null with UNSET if preferred.
It's also more efficient and simpler if we intercept the exception, rather than
check for empty strings in all the converters so this is what I've done.
The example above can then be imported successfully with a NULL marker such as
{{COPY testtab FROM 'temp.csv' WITH NULL='-'}}, the empty bigints will be
inserted as nulls.
I don't think this is critical enough for 2.1 or 2.2 so I only prepared the
patch for 3.0. It applies cleanly to all branches and I skipped 3.X for CI
since it is very similar to 3.11:
||3.0||3.11||trunk||
|[patch|https://github.com/stef1927/cassandra/tree/12794-cqlsh-3.0]|[patch|https://github.com/stef1927/cassandra/tree/12794-cqlsh-3.11]|[patch|https://github.com/stef1927/cassandra/tree/12794-cqlsh]|
|[dtest|http://cassci.datastax.com/view/Dev/view/stef1927/job/stef1927-12794-cqlsh-3.0-cqlsh-tests/]|[dtest|http://cassci.datastax.com/view/Dev/view/stef1927/job/stef1927-12794-cqlsh-3.11-cqlsh-tests/]|[dtest|http://cassci.datastax.com/view/Dev/view/stef1927/job/stef1927-12794-cqlsh-cqlsh-tests/]|
The dtest pull request is
[here|https://github.com/riptano/cassandra-dtest/pull/1415].
> COPY FROM with NULL='' fails when inserting empty row in primary key
> ---------------------------------------------------------------------
>
> Key: CASSANDRA-12794
> URL: https://issues.apache.org/jira/browse/CASSANDRA-12794
> Project: Cassandra
> Issue Type: Bug
> Components: CQL
> Environment: Tested using C* 2.1.15
> Reporter: Sucwinder Bassi
> Assignee: Stefania
> Fix For: 3.0.x, 3.x
>
>
> Using this table:
> CREATE TABLE testtab ( a_id text, b_id text, c_id text, d_id text,
> order_id uuid, acc_id bigint, bucket bigint, r_id text, ts bigint,
> PRIMARY KEY ((a_id, b_id, c_id, d_id), order_id));
> insert one row:
> INSERT INTO testtab (a_id, b_id , c_id , d_id , order_id, r_id ) VALUES ( '',
> '', '', 'a1', 645e7d3c-aef7-4e3c-b834-24b792cf2e55, 'r1');
> Use COPY to dump the row to temp.csv:
> copy testtab TO 'temp.csv';
> Which creates this file:
> $ cat temp.csv
> ,,,a1,645e7d3c-aef7-4e3c-b834-24b792cf2e55,,,r1,
> Truncate the testtab table and then use copy from with NULL='' to insert the
> row:
> cqlsh:sbkeyspace> COPY testtab FROM 'temp.csv' with NULL='';
> Using 1 child processes
> Starting copy of sbkeyspace.testtab with columns ['a_id', 'b_id', 'c_id',
> 'd_id', 'order_id', 'acc_id', 'bucket', 'r_id', 'ts'].
> Failed to import 1 rows: ParseError - Cannot insert null value for primary
> key column 'a_id'. If you want to insert empty strings, consider using the
> WITH NULL=<marker> option for COPY., given up without retries
> Failed to process 1 rows; failed rows written to import_sbkeyspace_testtab.err
> Processed: 1 rows; Rate: 2 rows/s; Avg. rate: 3 rows/s
> 1 rows imported from 1 files in 0.398 seconds (0 skipped).
> It shows 1 rows inserted, but the table is empty:
> select * from testtab ;
> a_id | b_id | c_id | d_id | order_id | acc_id | bucket | r_id | ts
> ------+------+------+------+----------+--------+--------+------+----
> (0 rows)
> The same error is returned even without the with NULL=''. Is it actually
> possible for copy from to insert an empty row into the primary key? The
> insert command shown above inserts the empty row for the primary key without
> any problems.
> Is this related to https://issues.apache.org/jira/browse/CASSANDRA-7792?
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)