/** * @return * Returns all the column names for a specific Cassandra table */ public String getColumnNamesFromTableQuery() { return String.format("SELECT %s FROM %s WHERE %s = '%s' " + "AND table_name = '%s'", COLUMN_NAME, SYSTEM_SCHEMA_COLS, KEYSPACE_NAME, this.schema.getKeySpace(), this.schema.getTableName()); }
/** * @return * Returns all the column names for a specific column family */ public String getColumnNamesFromColumnFamilyQuery() { return String.format("SELECT %s FROM %s WHERE %s = '%s' " + "AND columnfamily_name = '%s'", COLUMN_NAME, SYSTEM_SCHEMA_COLS, KEYSPACE_NAME, this.schema.getKeySpace(), this.schema.getTableName()); }
/** * @return * Insert statement used for sstable loading using the fields and ttl value */ public String generateInsertStmt() { final String fields = this.schema.getFields() .stream() .map(f -> StringTypes.SPACE + f.getFieldName()) .collect(Collectors.joining(",")); final String values = this.schema.getFields() .stream() .map(f -> "?") .collect(Collectors.joining(",")); final String ttlStr = this.ttl.isPresent() ? "USING TTL " + this.ttl.get().toString() : StringTypes.EMPTY; return String.format("INSERT INTO %s.%s ( %s ) VALUES ( %s ) %s", this.schema.getKeySpace(), this.schema.getTableName(), fields, values, ttlStr); }
/** * The schema is the source of truth here and if any of the schema field names aren't found * in the existing columns we need to alter that table and update the schema * * @param existingColumns * @return List of strings, one for each column that needs to be added */ public List<String> generateAlterTableStmt(final List<String> existingColumns) { final List<String> fieldNames = this.schema.getFields().stream() .map(field -> field.getFieldName()).collect(Collectors.toList()); log.info("Existing field names in schema: {}", Arrays.toString(fieldNames.toArray())); final List<String> missingCols = fieldNames.stream() .filter(field -> !existingColumns.contains(field)) .collect(Collectors.toList()); log.info("Missing columns (if any): {}", Arrays.toString(missingCols.toArray())); return this.schema.getFields().stream() .filter(field -> missingCols.contains(field.getFieldName())) .map(field -> String.format("ALTER TABLE %s.%s ADD %s", this.schema.getKeySpace(), this.schema.getTableName(), field.toString())) .collect(Collectors.toList()); }
Preconditions.checkState(!Strings.isNullOrEmpty(this.schema.getKeySpace()), "Keyspace is missing"); Preconditions.checkState(!Strings.isNullOrEmpty(this.schema.getTableName()), "Table name is missing"); Preconditions.checkState(this.schema.getFields() != null && !this.schema.getFields().isEmpty(),
public String generateCreateTableStmt() { final String fields = generateFieldsSyntax(); final String primaryKeyStmt = generatePrimaryKeySyntax(); final String clusteringOrder = generateClusteringOrderSyntax(); final String createStatement = String.format("CREATE TABLE IF NOT EXISTS %s.%s (%s, %s) %s", this.schema.getKeySpace(), this.schema.getTableName(), fields, primaryKeyStmt, clusteringOrder); log.info("Generated table schema is {}", createStatement); return createStatement; }