blob: 5ee342d14561d20e49c99649d0dae2ebda2ea627 [file] [log] [blame]
/*
* 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();
}
}
}
}