Github user xubo245 commented on a diff in the pull request:
https://github.com/apache/carbondata/pull/2837#discussion_r228699788
--- Diff: store/CSDK/main.cpp ---
@@ -484,6 +485,264 @@ bool readPerformanceFromS3(JNIEnv *env, char *argv[])
{
reader.close();
}
+/**
+ * test write data to local disk
+ *
+ * @param env jni env
+ * @return
+ */
+bool writeToLocal(JNIEnv *env, char *path) {
+
+ char *jsonSchema =
"[{stringField:string},{shortField:short},{intField:int},{longField:long},{doubleField:double},{boolField:boolean},{dateField:date},{timeField:timestamp},{floatField:float},{arrayField:array}]";
+
+ CarbonWriter carbonWriterClass;
+ carbonWriterClass.builder(env);
+ carbonWriterClass.outputPath(path);
+ carbonWriterClass.withCsvInput(jsonSchema);
+ carbonWriterClass.build();
+
+ int rowNum = 10;
+ int size = 10;
+ long longValue = 0;
+ double doubleValue = 0;
+ float floatValue = 0;
+ jclass objClass = env->FindClass("java/lang/String");
+ for (int i = 0; i < rowNum; ++i) {
+ jobjectArray arr = env->NewObjectArray(size, objClass, 0);
+ char ctrInt[10];
+ gcvt(i, 10, ctrInt);
+
+ char a[15] = "robot";
+ strcat(a, ctrInt);
+ jobject stringField = env->NewStringUTF(a);
+ env->SetObjectArrayElement(arr, 0, stringField);
+
+ char ctrShort[10];
+ gcvt(i % 10000, 10, ctrShort);
+ jobject shortField = env->NewStringUTF(ctrShort);
+ env->SetObjectArrayElement(arr, 1, shortField);
+
+ jobject intField = env->NewStringUTF(ctrInt);
+ env->SetObjectArrayElement(arr, 2, intField);
+
+
+ char ctrLong[10];
+ gcvt(longValue, 10, ctrLong);
+ longValue = longValue + 2;
+ jobject longField = env->NewStringUTF(ctrLong);
+ env->SetObjectArrayElement(arr, 3, longField);
+
+ char ctrDouble[10];
+ gcvt(doubleValue, 10, ctrDouble);
+ doubleValue = doubleValue + 2;
+ jobject doubleField = env->NewStringUTF(ctrDouble);
+ env->SetObjectArrayElement(arr, 4, doubleField);
+
+ jobject boolField = env->NewStringUTF("true");
+ env->SetObjectArrayElement(arr, 5, boolField);
+
+ jobject dateField = env->NewStringUTF(" 2019-03-02");
+ env->SetObjectArrayElement(arr, 6, dateField);
+
+ jobject timeField = env->NewStringUTF("2019-02-12 03:03:34");
+ env->SetObjectArrayElement(arr, 7, timeField);
+
+ char ctrFloat[10];
+ gcvt(floatValue, 10, ctrFloat);
+ floatValue = floatValue + 2;
+ jobject floatField = env->NewStringUTF(ctrFloat);
+ env->SetObjectArrayElement(arr, 8, floatField);
+
+ jobject arrayField = env->NewStringUTF("Hello#World#From#Carbon");
+ env->SetObjectArrayElement(arr, 9, arrayField);
+
+
+ carbonWriterClass.write(arr);
+
+ env->DeleteLocalRef(stringField);
+ env->DeleteLocalRef(shortField);
+ env->DeleteLocalRef(intField);
+ env->DeleteLocalRef(longField);
+ env->DeleteLocalRef(doubleField);
+ env->DeleteLocalRef(floatField);
+ env->DeleteLocalRef(dateField);
+ env->DeleteLocalRef(timeField);
+ env->DeleteLocalRef(boolField);
+ env->DeleteLocalRef(arrayField);
+ env->DeleteLocalRef(arr);
+ }
+ carbonWriterClass.close();
+
+ CarbonReader carbonReader;
+ carbonReader.builder(env, path);
+ carbonReader.build();
+ int i = 0;
+ CarbonRow carbonRow(env);
+ while (carbonReader.hasNext()) {
+ jobject row = carbonReader.readNextCarbonRow();
+ i++;
+ carbonRow.setCarbonRow(row);
+ printf("%s\t%d\t%ld\t", carbonRow.getString(0),
carbonRow.getInt(1), carbonRow.getLong(2));
+ jobjectArray array1 = carbonRow.getArray(3);
+ jsize length = env->GetArrayLength(array1);
+ int j = 0;
+ for (j = 0; j < length; j++) {
+ jobject element = env->GetObjectArrayElement(array1, j);
+ char *str = (char *) env->GetStringUTFChars((jstring) element,
JNI_FALSE);
+ printf("%s\t", str);
+ }
+ printf("%d\t", carbonRow.getShort(4));
+ printf("%d\t", carbonRow.getInt(5));
+ printf("%ld\t", carbonRow.getLong(6));
+ printf("%lf\t", carbonRow.getDouble(7));
+ bool bool1 = carbonRow.getBoolean(8);
+ if (bool1) {
+ printf("true\t");
+ } else {
+ printf("false\t");
+ }
+ printf("%f\t\n", carbonRow.getFloat(9));
+ env->DeleteLocalRef(row);
+ }
+ carbonReader.close();
+}
+
+/**
+ * test write data to S3
+ *
+ * @param env jni env
+ * @return
+ */
+bool writeToS3(JNIEnv *env, char *path, char *argv[]) {
+ printf("test write data ro S3");
+ char *jsonSchema =
"[{stringField:string},{shortField:short},{intField:int},{longField:long},{doubleField:double},{boolField:boolean},{dateField:date},{timeField:timestamp},{floatField:float},{arrayField:array}]";
+
+ char *args[3];
+ // "your access key"
+ args[0] = argv[1];
+ // "your secret key"
+ args[1] = argv[2];
+ // "your endPoint"
+ args[2] = argv[3];
+
+ CarbonWriter carbonWriterClass;
+ carbonWriterClass.builder(env);
+ carbonWriterClass.outputPath(path);
+ carbonWriterClass.withHadoopConf("fs.s3a.access.key", argv[1]);
+ carbonWriterClass.withHadoopConf("fs.s3a.secret.key", argv[2]);
+ carbonWriterClass.withHadoopConf("fs.s3a.endpoint", argv[3]);
+ carbonWriterClass.withCsvInput(jsonSchema);
+ carbonWriterClass.build();
+
+ int rowNum = 10;
+ int size = 10;
+ long longValue = 0;
+ double doubleValue = 0;
+ float floatValue = 0;
+ jclass objClass = env->FindClass("java/lang/String");
+ for (int i = 0; i < rowNum; ++i) {
+ jobjectArray arr = env->NewObjectArray(size, objClass, 0);
+ char ctrInt[10];
+ gcvt(i, 10, ctrInt);
+
+ char a[15] = "robot";
+ strcat(a, ctrInt);
+ jobject stringField = env->NewStringUTF(a);
+ env->SetObjectArrayElement(arr, 0, stringField);
+
+ char ctrShort[10];
+ gcvt(i % 10000, 10, ctrShort);
+ jobject shortField = env->NewStringUTF(ctrShort);
+ env->SetObjectArrayElement(arr, 1, shortField);
+
+ jobject intField = env->NewStringUTF(ctrInt);
+ env->SetObjectArrayElement(arr, 2, intField);
+
+
+ char ctrLong[10];
+ gcvt(longValue, 10, ctrLong);
+ longValue = longValue + 2;
+ jobject longField = env->NewStringUTF(ctrLong);
+ env->SetObjectArrayElement(arr, 3, longField);
+
+ char ctrDouble[10];
+ gcvt(doubleValue, 10, ctrDouble);
+ doubleValue = doubleValue + 2;
+ jobject doubleField = env->NewStringUTF(ctrDouble);
+ env->SetObjectArrayElement(arr, 4, doubleField);
+
+ jobject boolField = env->NewStringUTF("true");
+ env->SetObjectArrayElement(arr, 5, boolField);
+
+ jobject dateField = env->NewStringUTF(" 2019-03-02");
+ env->SetObjectArrayElement(arr, 6, dateField);
+
+ jobject timeField = env->NewStringUTF("2019-02-12 03:03:34");
+ env->SetObjectArrayElement(arr, 7, timeField);
+
+ char ctrFloat[10];
+ gcvt(floatValue, 10, ctrFloat);
+ floatValue = floatValue + 2;
+ jobject floatField = env->NewStringUTF(ctrFloat);
+ env->SetObjectArrayElement(arr, 8, floatField);
+
+ jobject arrayField = env->NewStringUTF("Hello#World#From#Carbon");
+ env->SetObjectArrayElement(arr, 9, arrayField);
+
+
+ carbonWriterClass.write(arr);
+
+ env->DeleteLocalRef(stringField);
+ env->DeleteLocalRef(shortField);
+ env->DeleteLocalRef(intField);
+ env->DeleteLocalRef(longField);
+ env->DeleteLocalRef(doubleField);
+ env->DeleteLocalRef(floatField);
+ env->DeleteLocalRef(dateField);
+ env->DeleteLocalRef(timeField);
+ env->DeleteLocalRef(boolField);
+ env->DeleteLocalRef(arrayField);
+ env->DeleteLocalRef(arr);
+ }
+ carbonWriterClass.close();
+
+ CarbonReader carbonReader;
+ carbonReader.builder(env, path);
+ carbonReader.withHadoopConf("fs.s3a.access.key", argv[1]);
+ carbonReader.withHadoopConf("fs.s3a.secret.key", argv[2]);
+ carbonReader.withHadoopConf("fs.s3a.endpoint", argv[3]);
+ carbonReader.build();
+ int i = 0;
+ CarbonRow carbonRow(env);
--- End diff --
I don't understand. Can you explain detail?
---