@@ -275,9 +275,8 @@ private synchronized void putInternal(Iterable<KvinTuple> tuples) throws IOExcep
275
275
276
276
WriterState writerState = null ;
277
277
String prevKey = null ;
278
- KvinTupleInternal prevTuple = null ;
279
278
for (KvinTuple tuple : tuples ) {
280
- KvinTupleInternal internalTuple = new KvinTupleInternal ();
279
+ KvinRecord record = new KvinRecord ();
281
280
282
281
Calendar tupleDate = getDate (tuple .time );
283
282
int year = tupleDate .get (Calendar .YEAR );
@@ -293,39 +292,32 @@ private synchronized void putInternal(Iterable<KvinTuple> tuples) throws IOExcep
293
292
.resolve (weekFolderName )
294
293
.resolve ("data__1.parquet" );
295
294
Files .createDirectories (file .getParent ());
296
- writerState = new WriterState (file , getParquetDataWriter (new Path (file .toString ())),
295
+ writerState = new WriterState (file , getKvinRecordWriter (new Path (file .toString ())),
297
296
year , week );
298
297
writers .put (key , writerState );
299
298
}
300
299
prevKey = key ;
301
300
}
302
301
303
302
// writing mappings and values
304
- internalTuple .setId (generateId (tuple , writeContext ,
305
- itemMappingWriter , propertyMappingWriter , contextMappingWriter ));
306
- internalTuple .setTime (tuple .time );
307
- internalTuple .setSeqNr (tuple .seqNr );
308
-
309
- internalTuple .setValueInt (tuple .value instanceof Integer ? (int ) tuple .value : null );
310
- internalTuple .setValueLong (tuple .value instanceof Long ? (long ) tuple .value : null );
311
- internalTuple .setValueFloat (tuple .value instanceof Float ? (float ) tuple .value : null );
312
- internalTuple .setValueDouble (tuple .value instanceof Double ? (double ) tuple .value : null );
313
- internalTuple .setValueString (tuple .value instanceof String ? (String ) tuple .value : null );
314
- internalTuple .setValueBool (tuple .value instanceof Boolean ? (Boolean ) tuple .value ? 1 : 0 : null );
315
- if (tuple .value instanceof Record || tuple .value instanceof URI || tuple .value instanceof BigInteger ||
316
- tuple .value instanceof BigDecimal || tuple .value instanceof Short || tuple .value instanceof Object []) {
317
- internalTuple .setValueObject (encodeRecord (tuple .value ));
318
- } else {
319
- internalTuple .setValueObject (null );
320
- }
321
- // set first flag
322
- if (prevTuple == null || !Arrays .equals (prevTuple .id , internalTuple .id )) {
323
- internalTuple .setFirst (true );
303
+ long [] id = generateIds (tuple , writeContext ,
304
+ itemMappingWriter , propertyMappingWriter , contextMappingWriter );
305
+ record .itemId = id [0 ];
306
+ record .contextId = id [1 ];
307
+ record .propertyId = id [2 ];
308
+ record .time = tuple .time ;
309
+ record .seqNr = tuple .seqNr ;
310
+
311
+ Object value = tuple .value ;
312
+ if (value instanceof Record || value instanceof URI || value instanceof BigInteger ||
313
+ value instanceof BigDecimal || value instanceof Short || value instanceof Object []) {
314
+ value = ByteBuffer .wrap (encodeRecord (value ));
324
315
}
325
- writerState .writer .write (internalTuple );
316
+ record .value = value ;
317
+
318
+ writerState .writer .write (record );
326
319
writerState .minMax [0 ] = Math .min (writerState .minMax [0 ], writeContext .lastItemId );
327
320
writerState .minMax [1 ] = Math .max (writerState .minMax [1 ], writeContext .lastItemId );
328
- prevTuple = internalTuple ;
329
321
}
330
322
331
323
for (WriterState state : writers .values ()) {
@@ -558,7 +550,7 @@ private Calendar getDate(long timestamp) {
558
550
return calendar ;
559
551
}
560
552
561
- private byte [] generateId (KvinTuple tuple ,
553
+ private long [] generateIds (KvinTuple tuple ,
562
554
WriteContext writeContext ,
563
555
ParquetWriter itemMappingWriter ,
564
556
ParquetWriter propertyMappingWriter ,
@@ -620,12 +612,7 @@ private byte[] generateId(KvinTuple tuple,
620
612
}
621
613
return newId ;
622
614
});
623
-
624
- ByteBuffer idBuffer = ByteBuffer .allocate (Long .BYTES * 3 );
625
- idBuffer .putLong (itemId );
626
- idBuffer .putLong (contextId );
627
- idBuffer .putLong (propertyId );
628
- return idBuffer .array ();
615
+ return new long [] {itemId , contextId , propertyId };
629
616
}
630
617
631
618
private long getId (URI entity , IdType idType ) {
@@ -1445,12 +1432,12 @@ static class InputFileInfo {
1445
1432
1446
1433
static class WriterState {
1447
1434
java .nio .file .Path file ;
1448
- ParquetWriter <KvinTupleInternal > writer ;
1435
+ ParquetWriter <KvinRecord > writer ;
1449
1436
int year ;
1450
1437
int week ;
1451
1438
long [] minMax = {Long .MAX_VALUE , Long .MIN_VALUE };
1452
1439
1453
- WriterState (java .nio .file .Path file , ParquetWriter <KvinTupleInternal > writer , int year , int week ) {
1440
+ WriterState (java .nio .file .Path file , ParquetWriter <KvinRecord > writer , int year , int week ) {
1454
1441
this .file = file ;
1455
1442
this .writer = writer ;
1456
1443
this .year = year ;
0 commit comments