@Override public String toString() { return catalog + "." + tableMetadata.getTable(); } }
public SchemaTableName getTable() { return metadata.getTable(); }
public SchemaMetadataBuilder table(ConnectorTableMetadata tableMetadata) { tables.put(tableMetadata.getTable(), tableMetadata); return this; }
@Override public void createTable(ConnectorSession session, ConnectorTableMetadata tableMetadata, boolean ignoreExisting) { ConnectorTableMetadata existingTable = tables.putIfAbsent(tableMetadata.getTable(), tableMetadata); if (existingTable != null && !ignoreExisting) { throw new IllegalArgumentException("Target table already exists: " + tableMetadata.getTable()); } }
@Override public void renameTable(ConnectorSession session, ConnectorTableHandle tableHandle, SchemaTableName newTableName) { // TODO: use locking to do this properly ConnectorTableMetadata table = getTableMetadata(session, tableHandle); if (tables.putIfAbsent(newTableName, table) != null) { throw new IllegalArgumentException("Target table already exists: " + newTableName); } tables.remove(table.getTable(), table); }
public StaticSystemTablesProvider(Set<SystemTable> systemTables) { this.systemTables = ImmutableSet.copyOf(systemTables); this.systemTablesMap = systemTables.stream() .collect(toImmutableMap( table -> table.getTableMetadata().getTable(), identity())); }
@Override public ConnectorOutputTableHandle beginCreateTable(ConnectorSession session, ConnectorTableMetadata tableMetadata, Optional<ConnectorNewTableLayout> layout) { List<MongoColumnHandle> columns = buildColumnHandles(tableMetadata); mongoSession.createTable(tableMetadata.getTable(), columns); setRollback(() -> mongoSession.dropTable(tableMetadata.getTable())); return new MongoOutputTableHandle( tableMetadata.getTable(), columns.stream().filter(c -> !c.isHidden()).collect(toList())); }
public BlackHoleTableHandle( ConnectorTableMetadata tableMetadata, int splitCount, int pagesPerSplit, int rowsPerPage, int fieldsLength, Duration pageProcessingDelay) { this(tableMetadata.getTable().getSchemaName(), tableMetadata.getTable().getTableName(), tableMetadata.getColumns().stream() .map(BlackHoleColumnHandle::new) .collect(toList()), splitCount, pagesPerSplit, rowsPerPage, fieldsLength, pageProcessingDelay); }
@Override public void createTable(ConnectorSession session, ConnectorTableMetadata tableMetadata, boolean ignoreExisting) { mongoSession.createTable(tableMetadata.getTable(), buildColumnHandles(tableMetadata)); }
@Override public List<String> listSchemaNames(ConnectorSession session) { return tables.listSystemTables(session).stream() .map(table -> table.getTableMetadata().getTable().getSchemaName()) .distinct() .collect(toImmutableList()); }
@Override public synchronized MemoryOutputTableHandle beginCreateTable(ConnectorSession session, ConnectorTableMetadata tableMetadata, Optional<ConnectorNewTableLayout> layout) { checkSchemaExists(tableMetadata.getTable().getSchemaName()); checkTableNotExists(tableMetadata.getTable()); long nextId = nextTableId.getAndIncrement(); Set<Node> nodes = nodeManager.getRequiredWorkerNodes(); checkState(!nodes.isEmpty(), "No Memory nodes available"); tableIds.put(tableMetadata.getTable(), nextId); MemoryTableHandle table = new MemoryTableHandle( connectorId, nextId, tableMetadata); tables.put(table.getTableId(), table); tableDataFragments.put(table.getTableId(), new HashMap<>()); return new MemoryOutputTableHandle(table, ImmutableSet.copyOf(tableIds.values())); }
@Override public ColumnMetadata getColumnMetadata(ConnectorSession session, ConnectorTableHandle tableHandle, ColumnHandle columnHandle) { ConnectorTableMetadata tableMetadata = getTableMetadata(session, tableHandle); String columnName = ((TpcdsColumnHandle) columnHandle).getColumnName(); for (ColumnMetadata column : tableMetadata.getColumns()) { if (column.getName().equals(columnName)) { return column; } } throw new IllegalArgumentException(format("Table %s does not have column %s", tableMetadata.getTable(), columnName)); }
@Override public ColumnMetadata getColumnMetadata(ConnectorSession session, ConnectorTableHandle tableHandle, ColumnHandle columnHandle) { ConnectorTableMetadata tableMetadata = getTableMetadata(session, tableHandle); String columnName = ((TpchColumnHandle) columnHandle).getColumnName(); for (ColumnMetadata column : tableMetadata.getColumns()) { if (column.getName().equals(columnName)) { return column; } } throw new IllegalArgumentException(String.format("Table %s does not have column %s", tableMetadata.getTable(), columnName)); }
@Override public ColumnMetadata getColumnMetadata(ConnectorSession session, ConnectorTableHandle tableHandle, ColumnHandle columnHandle) { InformationSchemaTableHandle informationSchemaTableHandle = checkTableHandle(tableHandle); ConnectorTableMetadata tableMetadata = TABLES.get(informationSchemaTableHandle.getSchemaTableName()); String columnName = ((InformationSchemaColumnHandle) columnHandle).getColumnName(); ColumnMetadata columnMetadata = findColumnMetadata(tableMetadata, columnName); checkArgument(columnMetadata != null, "Column %s on table %s does not exist", columnName, tableMetadata.getTable()); return columnMetadata; }
@Override public ColumnMetadata getColumnMetadata(ConnectorSession session, ConnectorTableHandle tableHandle, ColumnHandle columnHandle) { ConnectorTableMetadata tableMetadata = checkAndGetTable(session, tableHandle).getTableMetadata(); String columnName = ((SystemColumnHandle) columnHandle).getColumnName(); ColumnMetadata columnMetadata = findColumnMetadata(tableMetadata, columnName); checkArgument(columnMetadata != null, "Column %s on table %s does not exist", columnName, tableMetadata.getTable()); return columnMetadata; }
private void validateInternalTable(ConnectorTableMetadata meta) { String table = AccumuloTable.getFullTableName(meta.getTable()); String indexTable = Indexer.getIndexTableName(meta.getTable()); String metricsTable = Indexer.getMetricsTableName(meta.getTable()); if (tableManager.exists(table)) { throw new PrestoException(ACCUMULO_TABLE_EXISTS, "Cannot create internal table when an Accumulo table already exists"); } if (AccumuloTableProperties.getIndexColumns(meta.getProperties()).isPresent()) { if (tableManager.exists(indexTable) || tableManager.exists(metricsTable)) { throw new PrestoException(ACCUMULO_TABLE_EXISTS, "Internal table is indexed, but the index table and/or index metrics table(s) already exist"); } } }
@Test public void getTableMetadata() { // known table ConnectorTableMetadata tableMetadata = metadata.getTableMetadata(SESSION, NUMBERS_TABLE_HANDLE); assertEquals(tableMetadata.getTable(), new SchemaTableName("example", "numbers")); assertEquals(tableMetadata.getColumns(), ImmutableList.of( new ColumnMetadata("text", createUnboundedVarcharType()), new ColumnMetadata("value", BIGINT))); // unknown tables should produce null assertNull(metadata.getTableMetadata(SESSION, new ExampleTableHandle(CONNECTOR_ID, "unknown", "unknown"))); assertNull(metadata.getTableMetadata(SESSION, new ExampleTableHandle(CONNECTOR_ID, "example", "unknown"))); assertNull(metadata.getTableMetadata(SESSION, new ExampleTableHandle(CONNECTOR_ID, "unknown", "numbers"))); }
private TableWriterNode.WriterTarget createWriterTarget(TableWriterNode.WriterTarget target) { // TODO: begin these operations in pre-execution step, not here // TODO: we shouldn't need to store the schemaTableName in the handles, but there isn't a good way to pass this around with the current architecture if (target instanceof TableWriterNode.CreateName) { TableWriterNode.CreateName create = (TableWriterNode.CreateName) target; return new TableWriterNode.CreateHandle(metadata.beginCreateTable(session, create.getCatalog(), create.getTableMetadata(), create.getLayout()), create.getTableMetadata().getTable()); } if (target instanceof TableWriterNode.InsertReference) { TableWriterNode.InsertReference insert = (TableWriterNode.InsertReference) target; return new TableWriterNode.InsertHandle(metadata.beginInsert(session, insert.getHandle()), metadata.getTableMetadata(session, insert.getHandle()).getTable()); } if (target instanceof TableWriterNode.DeleteHandle) { TableWriterNode.DeleteHandle delete = (TableWriterNode.DeleteHandle) target; return new TableWriterNode.DeleteHandle(metadata.beginDelete(session, delete.getHandle()), delete.getSchemaTableName()); } throw new IllegalArgumentException("Unhandled target type: " + target.getClass().getSimpleName()); }
@Override public ConnectorOutputTableHandle beginCreateTable(ConnectorSession session, ConnectorTableMetadata tableMetadata, Optional<ConnectorNewTableLayout> layout) { checkNoRollback(); SchemaTableName tableName = tableMetadata.getTable(); AccumuloTable table = client.createTable(tableMetadata); AccumuloTableHandle handle = new AccumuloTableHandle( connectorId, tableName.getSchemaName(), tableName.getTableName(), table.getRowId(), table.isExternal(), table.getSerializerClassName(), table.getScanAuthorizations()); setRollback(() -> rollbackCreateTable(table)); return handle; }