[
https://issues.apache.org/jira/browse/DRILL-5978?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16353548#comment-16353548
]
ASF GitHub Bot commented on DRILL-5978:
---------------------------------------
Github user sohami commented on a diff in the pull request:
https://github.com/apache/drill/pull/1111#discussion_r166213941
--- Diff:
contrib/storage-hive/core/src/main/java/org/apache/drill/exec/store/hive/HiveUtilities.java
---
@@ -507,5 +509,51 @@ public static boolean
hasHeaderOrFooter(HiveTableWithColumnCache table) {
int skipFooter = retrieveIntProperty(tableProperties,
serdeConstants.FOOTER_COUNT, -1);
return skipHeader > 0 || skipFooter > 0;
}
+
+ /**
+ * This method checks whether the schema evolution properties are set in
job conf for the input format. If they
+ * aren't set, method sets the column names and types from
table/partition properties or storage descriptor.
+ * @param job the job to update
+ * @param properties table or partition properties
+ * @param isAcidTable true if the table is transactional, false otherwise
+ * @param sd storage descriptor
+ */
+ public static void setColumnTypes(JobConf job, Properties properties,
boolean isAcidTable, StorageDescriptor sd) {
+
+ // No work is needed, if schema evolution is used
+ if (Utilities.isSchemaEvolutionEnabled(job, isAcidTable) &&
job.get(IOConstants.SCHEMA_EVOLUTION_COLUMNS) != null &&
+ job.get(IOConstants.SCHEMA_EVOLUTION_COLUMNS_TYPES) != null) {
+ return;
+ }
+
+ String colNames;
+ String colTypes;
+
+ // Try to get get column names and types from table or partition
properties. If they are absent there, get columns
+ // data from storage descriptor of the table
+ if (properties.containsKey(serdeConstants.LIST_COLUMNS) &&
properties.containsKey(serdeConstants.LIST_COLUMN_TYPES)) {
+ colNames = job.get(serdeConstants.LIST_COLUMNS);
+ colTypes = job.get(serdeConstants.LIST_COLUMN_TYPES);
+ } else {
+ StringBuilder colNamesBuilder = new StringBuilder();
+ StringBuilder colTypesBuilder = new StringBuilder();
+ boolean isFirst = true;
+ for(FieldSchema col: sd.getCols()) {
+ if (isFirst) {
+ isFirst = false;
+ } else {
+ colNamesBuilder.append(',');
+ colTypesBuilder.append(',');
+ }
+ colNamesBuilder.append(col.getName());
+ colTypesBuilder.append(col.getType());
+ }
+ colNames = colNamesBuilder.toString();
+ colTypes = colTypesBuilder.toString();
--- End diff --
how about changing the loop as below:
```
final StringBuilder colNamesBuilder = new StringBuilder();
final StringBuilder colTypesBuilder = new StringBuilder();
for(FieldSchema col: sd.getCols()) {
colNamesBuilder.append(col.getName());
colTypesBuilder.append(col.getType());
colNamesBuilder.append(',');
colTypesBuilder.append(',');
}
colNames = colNamesBuilder.substring(0, colNamesBuilder.length() - 1);
colTypes = colTypesBuilder.substring(0, colTypesBuilder.length() - 1);
```
> Upgrade Hive libraries to 2.1.1 version.
> ----------------------------------------
>
> Key: DRILL-5978
> URL: https://issues.apache.org/jira/browse/DRILL-5978
> Project: Apache Drill
> Issue Type: Improvement
> Components: Storage - Hive
> Affects Versions: 1.11.0
> Reporter: Vitalii Diravka
> Assignee: Vitalii Diravka
> Priority: Major
> Labels: doc-impacting
> Fix For: 1.13.0
>
>
> Currently Drill uses [Hive version 1.2.1
> libraries|https://github.com/apache/drill/blob/master/pom.xml#L53] to perform
> queries on Hive. This version of library can be used for Hive1.x versions and
> Hive2.x versions too, but some features of Hive2.x are broken (for example
> using of ORC transactional tables). To fix that it will be good to update
> drill-hive library version to 2.1 or newer.
> Tasks which should be done:
> - resolving dependency conflicts;
> - investigating backward compatibility of newer drill-hive library with older
> Hive versions (1.x);
> - updating drill-hive version for
> [MapR|https://github.com/apache/drill/blob/master/pom.xml#L1777] profile too.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)