meng qingyou created ARROW-11178:
------------------------------------

             Summary: [Rust] StructArray: handling duplicate field names
                 Key: ARROW-11178
                 URL: https://issues.apache.org/jira/browse/ARROW-11178
             Project: Apache Arrow
          Issue Type: Improvement
            Reporter: meng qingyou


The arrow spec leaves the solution of `duplicate field names` to implementors.

The C++'s solution: ignore or raise error, the Java's solution: ignore, append, 
replace or raise error. Both use ignore as the default. Here is the references:
 * 
[https://github.com/apache/arrow/blob/57376d28cf433bed95f19fa44c1e90a780ba54e8/cpp/src/arrow/type.cc]
 * 
[https://github.com/apache/arrow/blob/25c736d48dc289f457e74d15d05db65f6d539447/java/vector/src/main/java/org/apache/arrow/vector/complex/AbstractStructVector.java]

I'm not expert at database or data science, but as far as I know, in the 
traditional RDBMS domain, it's unusual to allow duplicate field names. Further 
more, in the data analysis domain, perhaps it's usual to normalize/clean 
various kind of bad/dirty data *interactively* with tools like `pandas`?

Back to the problem, I have an example: given duplicate field names A A A B B, 
the user who knows actual data MAY choose to: replace first A with second A and 
append third A, and ignore second B. Or the duplication was just mistake?

Quote from [~nevi_me]: "I also prefer raising an error by default, as that'll 
make users aware very quickly". Is not acceptable if we silently 
append/ignore/replace duplicate fields, resulting unexpected results that user 
does not aware at all.

If we choose to support `replace`, `ignore` or `append`, at least we must let 
user control the exact behavior.  For IPC data, perhaps custom metadata (for 
file, message and field) is the only choice. I suggest just record this problem 
here, keep raising error until it's really necessary to support other solutions.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to