| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.apache.carbondata.examples.sdk; |
| |
| import java.io.File; |
| import java.io.FilenameFilter; |
| import java.io.IOException; |
| |
| import org.apache.carbondata.core.constants.CarbonCommonConstants; |
| import org.apache.carbondata.core.metadata.datatype.DataTypes; |
| import org.apache.carbondata.core.metadata.datatype.Field; |
| import org.apache.carbondata.core.util.CarbonProperties; |
| import org.apache.carbondata.sdk.file.CarbonReader; |
| import org.apache.carbondata.sdk.file.CarbonSchemaReader; |
| import org.apache.carbondata.sdk.file.CarbonWriter; |
| import org.apache.carbondata.sdk.file.Schema; |
| |
| import org.apache.commons.io.FileUtils; |
| |
| /** |
| * Example fo CarbonReader with close method |
| * After readNextRow of CarbonReader, User should close the reader, |
| * otherwise main will continue run some time |
| */ |
| public class CarbonReaderExample { |
| public static void main(String[] args) { |
| String path = "./testWriteFiles"; |
| try { |
| FileUtils.deleteDirectory(new File(path)); |
| CarbonProperties.getInstance() |
| .addProperty(CarbonCommonConstants.CARBON_TIMESTAMP_FORMAT, |
| CarbonCommonConstants.CARBON_TIMESTAMP_DEFAULT_FORMAT) |
| .addProperty(CarbonCommonConstants.CARBON_DATE_FORMAT, |
| CarbonCommonConstants.CARBON_DATE_DEFAULT_FORMAT); |
| Field[] fields = new Field[11]; |
| fields[0] = new Field("stringField", DataTypes.STRING); |
| fields[1] = new Field("shortField", DataTypes.SHORT); |
| fields[2] = new Field("intField", DataTypes.INT); |
| fields[3] = new Field("longField", DataTypes.LONG); |
| fields[4] = new Field("doubleField", DataTypes.DOUBLE); |
| fields[5] = new Field("boolField", DataTypes.BOOLEAN); |
| fields[6] = new Field("dateField", DataTypes.DATE); |
| fields[7] = new Field("timeField", DataTypes.TIMESTAMP); |
| fields[8] = new Field("decimalField", DataTypes.createDecimalType(8, 2)); |
| fields[9] = new Field("varcharField", DataTypes.VARCHAR); |
| fields[10] = new Field("arrayField", DataTypes.createArrayType(DataTypes.STRING)); |
| CarbonWriter writer = CarbonWriter.builder() |
| .outputPath(path) |
| .withLoadOption("complex_delimiter_level_1", "#") |
| .withCsvInput(new Schema(fields)) |
| .writtenBy("CarbonReaderExample") |
| .build(); |
| |
| for (int i = 0; i < 10; i++) { |
| String[] row2 = new String[]{ |
| "robot" + (i % 10), |
| String.valueOf(i % 10000), |
| String.valueOf(i), |
| String.valueOf(Long.MAX_VALUE - i), |
| String.valueOf((double) i / 2), |
| String.valueOf(true), |
| "2019-03-02", |
| "2019-02-12 03:03:34", |
| "12.345", |
| "varchar", |
| "Hello#World#From#Carbon" |
| }; |
| writer.write(row2); |
| } |
| writer.close(); |
| |
| File[] dataFiles = new File(path).listFiles(new FilenameFilter() { |
| @Override |
| public boolean accept(File dir, String name) { |
| if (name == null) { |
| return false; |
| } |
| return name.endsWith("carbonindex"); |
| } |
| }); |
| if (dataFiles == null || dataFiles.length < 1) { |
| throw new RuntimeException("Carbon index file not exists."); |
| } |
| Schema schema = CarbonSchemaReader |
| .readSchema(dataFiles[0].getAbsolutePath()) |
| .asOriginOrder(); |
| // Transform the schema |
| String[] strings = new String[schema.getFields().length]; |
| for (int i = 0; i < schema.getFields().length; i++) { |
| strings[i] = (schema.getFields())[i].getFieldName(); |
| } |
| |
| // Read data |
| CarbonReader reader = CarbonReader |
| .builder(path, "_temp") |
| .projection(strings) |
| .build(); |
| |
| System.out.println("\nData:"); |
| int i = 0; |
| while (reader.hasNext()) { |
| Object[] row = (Object[]) reader.readNextRow(); |
| System.out.println(String.format("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t", |
| i, row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], |
| row[8], row[9] |
| )); |
| Object[] arr = (Object[]) row[10]; |
| for (int j = 0; j < arr.length; j++) { |
| System.out.print(arr[j] + " "); |
| } |
| assert (arr[0].equals("Hello")); |
| assert (arr[3].equals("Carbon")); |
| System.out.println(); |
| i++; |
| } |
| reader.close(); |
| |
| // Read data |
| CarbonReader reader2 = CarbonReader |
| .builder(path, "_temp") |
| .build(); |
| |
| System.out.println("\nData:"); |
| i = 0; |
| while (reader2.hasNext()) { |
| Object[] row = (Object[]) reader2.readNextRow(); |
| System.out.print(String.format("%s\t%s\t%s\t%s\t%s\t", |
| i, row[0], row[1], row[2], |
| row[3])); |
| Object[] arr = (Object[]) row[4]; |
| for (int j = 0; j < arr.length; j++) { |
| System.out.print(arr[j] + " "); |
| } |
| System.out.println(String.format("\t%s\t%s\t%s\t%s\t%s\t%s\t", |
| row[5], row[6], row[7], row[8], row[9], row[10])); |
| i++; |
| } |
| reader2.close(); |
| } catch (Throwable e) { |
| e.printStackTrace(); |
| assert (false); |
| System.out.println(e.getMessage()); |
| } finally { |
| try { |
| FileUtils.deleteDirectory(new File(path)); |
| } catch (IOException e) { |
| e.printStackTrace(); |
| } |
| } |
| } |
| } |