Uploaded image for project: 'Apache Cassandra'
  1. Apache Cassandra
  2. CASSANDRA-16372

Import from csv of empty strings in list fails with a ParseError: Empty values are not allowed, given up without retries

    XMLWordPrintableJSON

Details

    • Correctness
    • Normal
    • Normal
    • User Report
    • All
    • None
    • Hide

      dtests patch adds test cases with empty strings inside collections. Already existing test_reading_collections_with_empty_values covers the case where empty values for other data types still throw during parsing rather than on the server-side.

      Show
      dtests patch adds test cases with empty strings inside collections. Already existing test_reading_collections_with_empty_values covers the case where empty values for other data types still throw during parsing rather than on the server-side.

    Description

       

      Cqlsh fail to import an empty string which is present in a list data type.

      In those conditions, simple csv backups can discard rows and data can be corrupted.

       

      Conditions

       

      # cqlsh
      Connected to Test Cluster at 127.0.0.1:9042.
      [cqlsh 5.0.1 | Cassandra 3.11.6 | CQL spec 3.4.4 | Native protocol v4]
      Use HELP for help.
      
      CREATE TABLE test.test_1 (
          uid uuid PRIMARY KEY,
          texts list<text>
      );
      
      insert into test.test_1 ( uid, texts ) VALUES( 833fee3f-d4f9-418b-9387-84ac2cda5cb7, ['But if you now try to wash your hands,', ''] );
      
      

       

      Now exporting and and re-importing data fails:

       

      cqlsh> select * from test.test_1;
      
       uid                                  | texts
      --------------------------------------+------------------------------------------------
       833fee3f-d4f9-418b-9387-84ac2cda5cb7 | ['But if you now try to wash your hands,', '']
      
      
      cqlsh> COPY test.test_1 (uid, texts) TO 'ctm.csv'; 
      Using 7 child processesStarting copy of test.test_1 with columns [uid, texts].
      Processed: 1 rows; Rate: 9 rows/s; Avg. rate: 9 rows/s 1 rows exported to 1 files in 0.148 seconds. 
      
      cqlsh> truncate table test.test_1;
      
      
      cqlsh> COPY test.test_1 (uid, texts) FROM 'ctm.csv';
      Using 7 child processes
      Starting copy of test.test_1 with columns [uid, texts].
      Failed to import 1 rows: ParseError - Failed to parse ['But if you now try to wash your hands,', ''] : Empty values are not allowed,  given up without retries
      Failed to process 1 rows; failed rows written to import_test_test_1.err
      Processed: 1 rows; Rate:       2 rows/s; Avg. rate:       2 rows/s
      1 rows imported from 1 files in 0.415 seconds (0 skipped).
      
      
      cqlsh> select * from test.test_1; 
      uid  | pid
      -----+-----
      
      

       

       

       

      Attachments

        Activity

          People

            Gerrrr Alex Sorokoumov
            Ostico Ostico
            Alex Sorokoumov
            Brandon Williams
            Votes:
            1 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Time Tracking

                Estimated:
                Original Estimate - Not Specified
                Not Specified
                Remaining:
                Remaining Estimate - 0h
                0h
                Logged:
                Time Spent - 0.5h
                0.5h