/** * Checks in table params if desired implementing class is given. Otherwise by default returns instance of {@link * org.apache.lens.cube.metadata.timeline.EndsAndHolesPartitionTimeline}. * * @param client * @param storageTable * @param updatePeriod * @param partitionColumn * @return */ public static PartitionTimeline get(CubeMetastoreClient client, String storageTable, UpdatePeriod updatePeriod, String partitionColumn) { try { String storageClassName = client.getTable(storageTable).getParameters().get( MetastoreUtil.getPartitionTimelineStorageClassKey( updatePeriod, partitionColumn)); Class<? extends PartitionTimeline> clz = (Class<? extends PartitionTimeline>) Class.forName(storageClassName); Constructor<? extends PartitionTimeline> constructor = clz.getConstructor( String.class, UpdatePeriod.class, String.class); return constructor.newInstance( storageTable, updatePeriod, partitionColumn); } catch (Exception e) { return new EndsAndHolesPartitionTimeline(storageTable, updatePeriod, partitionColumn); } } }
/** * Checks in table params if desired implementing class is given. Otherwise by default returns instance of {@link * org.apache.lens.cube.metadata.timeline.EndsAndHolesPartitionTimeline}. * * @param client * @param storageTable * @param updatePeriod * @param partitionColumn * @return */ public static PartitionTimeline get(CubeMetastoreClient client, String storageTable, UpdatePeriod updatePeriod, String partitionColumn) { try { String storageClassName = client.getTable(storageTable).getParameters().get( MetastoreUtil.getPartitionTimelineStorageClassKey( updatePeriod, partitionColumn)); Class<? extends PartitionTimeline> clz = (Class<? extends PartitionTimeline>) Class.forName(storageClassName); Constructor<? extends PartitionTimeline> constructor = clz.getConstructor( String.class, UpdatePeriod.class, String.class); return constructor.newInstance( storageTable, updatePeriod, partitionColumn); } catch (Exception e) { return new EndsAndHolesPartitionTimeline(storageTable, updatePeriod, partitionColumn); } } }
/** * Sets PartitionTimeline implementation class's name and specific params in table param. * * @param table * @see #init(org.apache.hadoop.hive.ql.metadata.Table) */ public void updateTableParams(Table table) { String prefix = MetastoreUtil.getPartitionInfoKeyPrefix(getUpdatePeriod(), getPartCol()); String storageClass = MetastoreUtil.getPartitionTimelineStorageClassKey(getUpdatePeriod(), getPartCol()); table.getParameters().put(storageClass, this.getClass().getCanonicalName()); for (Map.Entry<String, String> entry : toProperties().entrySet()) { table.getParameters().put(prefix + entry .getKey(), entry.getValue()); } }
/** * Sets PartitionTimeline implementation class's name and specific params in table param. * * @param table * @see #init(org.apache.hadoop.hive.ql.metadata.Table) */ public void updateTableParams(Table table) { String prefix = MetastoreUtil.getPartitionInfoKeyPrefix(getUpdatePeriod(), getPartCol()); String storageClass = MetastoreUtil.getPartitionTimelineStorageClassKey(getUpdatePeriod(), getPartCol()); table.getParameters().put(storageClass, this.getClass().getCanonicalName()); for (Map.Entry<String, String> entry : toProperties().entrySet()) { table.getParameters().put(prefix + entry .getKey(), entry.getValue()); } }
private void assertTimeline(CubeMetastoreClient client, String factName, String storageName, UpdatePeriod updatePeriod, String timeDim, PartitionTimeline expectedTimeline) throws Exception { assertNotNull(factName); assertNotNull(storageName); assertNotNull(updatePeriod); assertNotNull(timeDim); String storageTableName = MetastoreUtil.getFactOrDimtableStorageTableName(factName, storageName); List<PartitionTimeline> timelines = client.getTimelines(factName, storageName, updatePeriod.name(), timeDim); assertEquals(timelines.size(), 1); PartitionTimeline actualTimeline = timelines.get(0); assertEquals(actualTimeline, expectedTimeline); assertEquals(client.getTable(storageTableName).getParameters() .get(MetastoreUtil.getPartitionTimelineStorageClassKey(updatePeriod, timeDim)), expectedTimeline.getClass().getCanonicalName()); expectedTimeline.init(client.getTable(MetastoreUtil.getFactOrDimtableStorageTableName(factName, storageName))); assertEquals(actualTimeline, expectedTimeline); }
table.getParameters().put(MetastoreUtil.getPartitionTimelineStorageClassKey(HOURLY, "ttd"), StoreAllPartitionTimeline.class.getCanonicalName()); table.getParameters().put(MetastoreUtil.getPartitionTimelineStorageClassKey(HOURLY, "ttd2"), StoreAllPartitionTimeline.class.getCanonicalName()); client.pushHiveTable(table);
c1TableHourly.getParameters().put(getPartitionTimelineStorageClassKey(HOURLY, getDatePartitionKey()), StoreAllPartitionTimeline.class.getCanonicalName()); c1TableHourly.getParameters().put(getPartitionTimelineStorageClassKey(HOURLY, itPart.getName()), StoreAllPartitionTimeline.class.getCanonicalName()); c1TableHourly.getParameters().put(getPartitionTimelineStorageClassKey(HOURLY, etPart.getName()), StoreAllPartitionTimeline.class.getCanonicalName()); client.pushHiveTable(c1TableHourly); c2TableHourly.getParameters().put(getPartitionTimelineStorageClassKey(HOURLY, getDatePartitionKey()), EndsAndHolesPartitionTimeline.class.getCanonicalName()); c2TableHourly.getParameters().put(getPartitionTimelineStorageClassKey(HOURLY, itPart.getName()), EndsAndHolesPartitionTimeline.class.getCanonicalName()); c2TableHourly.getParameters().put(getPartitionTimelineStorageClassKey(HOURLY, etPart.getName()), EndsAndHolesPartitionTimeline.class.getCanonicalName()); client.pushHiveTable(c2TableHourly);
c2Table.getParameters().put(getPartitionTimelineStorageClassKey(HOURLY, getDatePartitionKey()), StoreAllPartitionTimeline.class.getCanonicalName()); c2Table.getParameters().put(getPartitionTimelineStorageClassKey(HOURLY, itPart.getName()), StoreAllPartitionTimeline.class.getCanonicalName()); c2Table.getParameters().put(getPartitionTimelineStorageClassKey(HOURLY, etPart.getName()), StoreAllPartitionTimeline.class.getCanonicalName()); client.pushHiveTable(c2Table);