embulk-output-embulk_output_domo 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a0f0e72f5092ee17a2a9f653daf209c54afd686e
4
- data.tar.gz: 9d4343c4a5f4972d6018a2f5e5e1c49b9dddfd3a
3
+ metadata.gz: a43474cd86b39442338ad57734bcc0c70fe123ae
4
+ data.tar.gz: 05c2e28fecf1292959564790a9c9a141e06292f9
5
5
  SHA512:
6
- metadata.gz: a69775fdbc1c12340e899ccbf18d6f9c8fa53340fbf7af47ffc0b279183c3ff25d4cfc762529081ccae6cc52e73ef72955e35d052b26f4349a260e3793a883e8
7
- data.tar.gz: 298b879ef0206ca9522330b13ae1e4b1678c0aad1d2141185598986d76e1f3be42a0883bc2d8ff16d4b386385803bfeb39233b409e52d40b902bcaa57523818c
6
+ metadata.gz: 2e41586ca7938d74a76776a589488cb493f873bf452f62fbef6b9012b7092b9e58890a810768e4ff9e2953df0a55db1a1a414dce2a3d33c09f2f18628e04f1f7
7
+ data.tar.gz: a41debd9b92b3febe60154e9a044e3b420315ad6c8f1cc8d846393ddff3199811192188f0550a63f0e34edbc7fea32d13ece05b987f99ca7cf0862d4af181bd2
data/README.md CHANGED
@@ -23,7 +23,7 @@ embulk gem install embulk-output-embulk_output_domo
23
23
  - **useHttps**: description (boolean, default: `true`)
24
24
  - **streamName**: description (string, required)
25
25
  - **column_options**: description (object, default: `Check embulk column options`)
26
- - **batchSize**: description (integer, default: `1000000`)
26
+ - **batchSize**: description (integer, default: `1000`)
27
27
  - **quote**: description (string, default: `"\""`)
28
28
  - **quote_policy**: description (string, default: `MINIMAL`)
29
29
  - **escape**: description (string, default: `null`)
@@ -13,7 +13,7 @@ configurations {
13
13
  provided
14
14
  }
15
15
 
16
- version = "0.3.0"
16
+ version = "0.3.1"
17
17
 
18
18
  sourceCompatibility = 1.8
19
19
  targetCompatibility = 1.8
@@ -87,7 +87,7 @@ public class EmbulkOutputDomoOutputPlugin
87
87
  private static ArrayList<StringBuilder> allRecords = new ArrayList<StringBuilder>();
88
88
  private static ArrayList<String> recordsParts = new ArrayList<String>();
89
89
  private int currentPartCounter = 1;
90
- private static int totalBatches = 1;
90
+ public static int totalBatches = 1;
91
91
  private static int pageReaderCount = 0;
92
92
  private static String TEMP_DIR = "/tmp/csv/" +RandomStringUtils.randomAlphabetic(10)+"/";
93
93
  public static int totalRecordsCounter = 0;
@@ -131,10 +131,6 @@ public class EmbulkOutputDomoOutputPlugin
131
131
  @ConfigDefault("true")
132
132
  public boolean getUseHttps();
133
133
 
134
- @Config("updateMethod")
135
- @ConfigDefault("REPLACE")
136
- public String getUpdateMethod();
137
-
138
134
  @Config("streamName")
139
135
  public String getStreamName();
140
136
 
@@ -142,8 +138,9 @@ public class EmbulkOutputDomoOutputPlugin
142
138
  @ConfigDefault("{}")
143
139
  Map<String, TimestampColumnOption> getColumnOptions();
144
140
 
141
+ // Not used we get data in batches from input plugin, so we can configure there
145
142
  @Config("batchSize")
146
- @ConfigDefault("1000000")
143
+ @ConfigDefault("1000")
147
144
  public int getBatchSize();
148
145
 
149
146
  @Config("quote")
@@ -162,48 +159,7 @@ public class EmbulkOutputDomoOutputPlugin
162
159
  @ConfigDefault("\"LF\"")
163
160
  Newline getNewlineInField();
164
161
  }
165
- public com.domo.sdk.datasets.model.Schema getDomoSchema(Schema schema){
166
- /**
167
- * We need to return domo Schema
168
- * e.g. new com.domo.sdk.datasets.model.Schema(Lists.newArrayList(new Column(STRING, "Friend"), new Column(STRING, "Attending")))
169
- */
170
- ArrayList<com.domo.sdk.datasets.model.Column> domoSchema = new ArrayList<com.domo.sdk.datasets.model.Column>();
171
- for (int i = 0; i < schema.size(); i++) {
172
- Column column = schema.getColumn(i);
173
- Type type = column.getType();
174
- System.out.println("{\n" +
175
- " \"type\" : \""+type.getName().toUpperCase()+"\",\n" +
176
- " \"name\" : \""+column.getName() +"\"\n" +
177
- " },");
178
- switch (type.getName()) {
179
- case "long":
180
- domoSchema.add(new com.domo.sdk.datasets.model.Column(ColumnType.LONG, column.getName()));
181
- break;
182
- case "double":
183
- domoSchema.add(new com.domo.sdk.datasets.model.Column(ColumnType.DOUBLE, column.getName()));
184
- break;
185
- case "boolean":
186
- domoSchema.add(new com.domo.sdk.datasets.model.Column( ColumnType.LONG, column.getName()));
187
- break;
188
- case "string":
189
- domoSchema.add(new com.domo.sdk.datasets.model.Column(ColumnType.STRING, column.getName()));
190
- break;
191
- case "timestamp":
192
- domoSchema.add(new com.domo.sdk.datasets.model.Column( ColumnType.DATETIME, column.getName()));
193
- break;
194
- default:
195
- logger.info("Unsupported type " + type.getName());
196
- break;
197
- }
198
- }
199
- if(domoSchema != null && domoSchema.size()>0){
200
- return new com.domo.sdk.datasets.model.Schema(domoSchema);
201
- }
202
- else{
203
- logger.error("Cannot create domo schema");
204
- throw new RuntimeException("Cannot create domo Schema");
205
- }
206
- }
162
+
207
163
 
208
164
  @Override
209
165
  public ConfigDiff transaction(ConfigSource config,
@@ -217,7 +173,6 @@ public class EmbulkOutputDomoOutputPlugin
217
173
  final String clientSecret = task.getClientSecret();
218
174
  final String apiHost = task.getApiHost();
219
175
  final boolean useHttps = task.getUseHttps();
220
- String updateMethod = task.getUpdateMethod();
221
176
 
222
177
  try {
223
178
  if (client == null) {
@@ -243,7 +198,6 @@ public class EmbulkOutputDomoOutputPlugin
243
198
  totalBatches = task.getBatchSize();
244
199
  File directory = new File(TEMP_DIR);
245
200
  if(!directory.exists()) {
246
-
247
201
  directory.mkdirs();
248
202
  }
249
203
  }
@@ -345,17 +299,7 @@ public class EmbulkOutputDomoOutputPlugin
345
299
  this.client = client;
346
300
  this.task = task;
347
301
  this.schema = schema;
348
- this.partPageNum = partNum++;
349
302
 
350
- try {
351
- File directory = new File(TEMP_DIR);
352
- if (!directory.exists()) {
353
- directory.mkdir();
354
- }
355
- }
356
- catch(Exception ex){
357
- System.out.println(ex.getMessage());
358
- }
359
303
  this.partPageNum = partNum++;
360
304
  this.quotePolicy = this.task.getQuotePolicy();
361
305
  this.quote = this.task.getQuoteChar() != '\0' ? this.task.getQuoteChar() : '"';
@@ -366,6 +310,10 @@ public class EmbulkOutputDomoOutputPlugin
366
310
  this.nullString = "";
367
311
  }
368
312
 
313
+ /**
314
+ * Main Transactional Page that loops
315
+ * @param page
316
+ */
369
317
  @Override
370
318
  public void add(Page page)
371
319
  {
@@ -487,8 +435,20 @@ public class EmbulkOutputDomoOutputPlugin
487
435
  {
488
436
  return Exec.newTaskReport();
489
437
  }
490
-
491
438
  }
439
+ /************************ H E L P E R M E T H O D S *****************************/
440
+
441
+ /**
442
+ *
443
+ * @param v String value
444
+ * @param delimiter csv delimeter
445
+ * @param policy enum QuotePolicy
446
+ * @param quote Quote Character
447
+ * @param escape Escape Character
448
+ * @param newline NewLine Character
449
+ * @param nullString Null string
450
+ * @return String
451
+ */
492
452
  private String setEscapeAndQuoteValue(String v, char delimiter, QuotePolicy policy, char quote, char escape, String newline, String nullString)
493
453
  {
494
454
  StringBuilder escapedValue = new StringBuilder();
@@ -535,25 +495,41 @@ public class EmbulkOutputDomoOutputPlugin
535
495
  return escapedValue.toString();
536
496
  }
537
497
  }
498
+
499
+ /**
500
+ * Quote a string
501
+ * @param v
502
+ * @param quote
503
+ * @return String
504
+ */
538
505
  private String setQuoteValue(String v, char quote)
539
506
  {
540
-
541
507
  return String.valueOf(quote) + v + quote;
542
508
  }
543
- private String stringifyList(List<StringBuilder> records){
544
- StringBuilder sb = new StringBuilder();
545
- for (StringBuilder s : records)
546
- {
547
- if(s!=null) {
548
- sb.append(s);
549
- sb.append("\n");
550
- }
551
- else{
552
- logger.info("NULL Found!");
509
+
510
+ /**
511
+ * Return a list of all CSV files inside a folder
512
+ * @param searchFolder String
513
+ * @return an Arraylist of File Objects
514
+ */
515
+ public static ArrayList<File> loadCSVFiles (String searchFolder) {
516
+ File folder = new File(searchFolder);
517
+ File[] listOfFiles = folder.listFiles();
518
+ ArrayList<File> csvFiles = new ArrayList<File>();
519
+
520
+ for (File file : listOfFiles) {
521
+ if (file.isFile() && file.getName().indexOf(".csv")>0) {
522
+ csvFiles.add(file);
553
523
  }
554
524
  }
555
- return sb.toString();
525
+ return csvFiles;
556
526
  }
527
+
528
+ /**
529
+ * Stringify an ArrayList of StringBuilder to a String
530
+ * @param records ArrayList of <StringBuilder>
531
+ * @return String
532
+ */
557
533
  private String stringify(ArrayList<StringBuilder> records) {
558
534
  StringBuilder sb = new StringBuilder();
559
535
  for (StringBuilder s : records)
@@ -563,6 +539,14 @@ public class EmbulkOutputDomoOutputPlugin
563
539
  }
564
540
  return sb.toString();
565
541
  }
542
+
543
+ /**
544
+ * Not used currently. It slices a List of a Templated input to chunkSize
545
+ * @param input List<T>
546
+ * @param chunkSize Int
547
+ * @param <T>
548
+ * @return
549
+ */
566
550
  public static <T> List<List<T>> batches(List<T> input, int chunkSize) {
567
551
 
568
552
  int inputSize = input.size();
@@ -584,15 +568,15 @@ public class EmbulkOutputDomoOutputPlugin
584
568
 
585
569
  return chunks;
586
570
  }
587
- public static String readFileAsString(String fileName)throws Exception
588
- {
589
- String data = "";
590
- data = new String(Files.readAllBytes(Paths.get(fileName)));
591
- return data;
592
- }
571
+
572
+ /**
573
+ * Create a List of Zip files. Each zip file will contain a batch of csv files
574
+ * @param sourceFiles A List of Source <Files>
575
+ * @param path string
576
+ * @return List<File>
577
+ */
593
578
  public static List<File> toGzipFilesUTF8( List<File> sourceFiles, String path){
594
579
  List<File> files = new ArrayList<>();
595
- int batchMaxCount = 1000;
596
580
  int currentCount = 0;
597
581
  int remaining = sourceFiles.size();
598
582
  ArrayList<File> batchFiles = new ArrayList<File>();
@@ -600,8 +584,8 @@ public class EmbulkOutputDomoOutputPlugin
600
584
  for (File sourceFile : sourceFiles) {
601
585
  currentCount++;
602
586
  batchFiles.add(sourceFile);
603
- if(currentCount>=batchMaxCount || currentCount>=remaining){
604
- remaining=remaining-batchMaxCount;
587
+ if(currentCount>=totalBatches || currentCount>=remaining){
588
+ remaining=remaining-totalBatches;
605
589
  String zipFileName = sourceFile.getName().replace(".csv", ".zip");
606
590
  files.add(toGzipFileUTF8(batchFiles, path + zipFileName));
607
591
  // System.out.println("Add file "+sourceFile.getName()+"to zip file name = "+zipFileName+". Current count = "+currentCount +" Total records counter = "+totalRecordsCounter);
@@ -613,6 +597,13 @@ public class EmbulkOutputDomoOutputPlugin
613
597
  }
614
598
  return files;
615
599
  }
600
+
601
+ /**
602
+ * Read csv Files as UTF-8, convert to String
603
+ * @param csvFiles
604
+ * @param zipFilePath
605
+ * @return a Zip File
606
+ */
616
607
  public static File toGzipFileUTF8(ArrayList<File> csvFiles, String zipFilePath){
617
608
  File outputFile = new File(zipFilePath);
618
609
  try {
@@ -639,6 +630,13 @@ public class EmbulkOutputDomoOutputPlugin
639
630
 
640
631
  return outputFile;
641
632
  }
633
+
634
+ /**
635
+ * Writes a CSV File
636
+ * @param fileContent
637
+ * @param fileName
638
+ * @throws IOException
639
+ */
642
640
  public static void WriteToFile(String fileContent, String fileName) throws IOException {
643
641
  //logger.info("writing csv file to "+fileName);
644
642
 
@@ -660,18 +658,51 @@ public class EmbulkOutputDomoOutputPlugin
660
658
  bw.close();
661
659
  }
662
660
 
663
- public static ArrayList<File> loadCSVFiles (String searchFolder) {
664
- File folder = new File(searchFolder);
665
- File[] listOfFiles = folder.listFiles();
666
- ArrayList<File> csvFiles = new ArrayList<File>();
667
-
668
- for (File file : listOfFiles) {
669
- if (file.isFile() && file.getName().indexOf(".csv")>0) {
670
- csvFiles.add(file);
671
- }
661
+ /**
662
+ * Get Domo Schema
663
+ * @param schema
664
+ * @return
665
+ */
666
+ public com.domo.sdk.datasets.model.Schema getDomoSchema(Schema schema){
667
+ /**
668
+ * We need to return domo Schema
669
+ * e.g. new com.domo.sdk.datasets.model.Schema(Lists.newArrayList(new Column(STRING, "Friend"), new Column(STRING, "Attending")))
670
+ */
671
+ ArrayList<com.domo.sdk.datasets.model.Column> domoSchema = new ArrayList<com.domo.sdk.datasets.model.Column>();
672
+ for (int i = 0; i < schema.size(); i++) {
673
+ Column column = schema.getColumn(i);
674
+ Type type = column.getType();
675
+ System.out.println("{\n" +
676
+ " \"type\" : \""+type.getName().toUpperCase()+"\",\n" +
677
+ " \"name\" : \""+column.getName() +"\"\n" +
678
+ " },");
679
+ switch (type.getName()) {
680
+ case "long":
681
+ domoSchema.add(new com.domo.sdk.datasets.model.Column(ColumnType.LONG, column.getName()));
682
+ break;
683
+ case "double":
684
+ domoSchema.add(new com.domo.sdk.datasets.model.Column(ColumnType.DOUBLE, column.getName()));
685
+ break;
686
+ case "boolean":
687
+ domoSchema.add(new com.domo.sdk.datasets.model.Column( ColumnType.LONG, column.getName()));
688
+ break;
689
+ case "string":
690
+ domoSchema.add(new com.domo.sdk.datasets.model.Column(ColumnType.STRING, column.getName()));
691
+ break;
692
+ case "timestamp":
693
+ domoSchema.add(new com.domo.sdk.datasets.model.Column( ColumnType.DATETIME, column.getName()));
694
+ break;
695
+ default:
696
+ logger.info("Unsupported type " + type.getName());
697
+ break;
672
698
  }
673
-
674
- //System.out.println("All csv files are "+ csvFiles);
675
- return csvFiles;
699
+ }
700
+ if(domoSchema != null && domoSchema.size()>0){
701
+ return new com.domo.sdk.datasets.model.Schema(domoSchema);
702
+ }
703
+ else{
704
+ logger.error("Cannot create domo schema");
705
+ throw new RuntimeException("Cannot create domo Schema");
706
+ }
676
707
  }
677
708
  }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-output-embulk_output_domo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Angelos Alexopoulos
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-22 00:00:00.000000000 Z
11
+ date: 2018-10-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -67,7 +67,7 @@ files:
67
67
  - classpath/commons-io-2.6.jar
68
68
  - classpath/hamcrest-core-1.3.jar
69
69
  - classpath/okio-1.12.0.jar
70
- - classpath/embulk-output-embulk_output_domo-0.3.0.jar
70
+ - classpath/embulk-output-embulk_output_domo-0.3.1.jar
71
71
  homepage: https://github.com/alexopoulos7/embulk-output-embulk_output_domo
72
72
  licenses:
73
73
  - MIT