Class FieldAccessDescriptor
- java.lang.Object
-
- org.apache.beam.sdk.schemas.FieldAccessDescriptor
-
- All Implemented Interfaces:
java.io.Serializable
@Experimental(SCHEMAS) public abstract class FieldAccessDescriptor extends java.lang.Object implements java.io.Serializable
Used inside of aDoFn
to describe which fields in a schema type need to be accessed for processing.This class always puts the selected fields in a deterministic order.
- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
FieldAccessDescriptor.FieldDescriptor
Description of a single field.
-
Constructor Summary
Constructors Constructor Description FieldAccessDescriptor()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description static FieldAccessDescriptor
create()
Return an emptyFieldAccessDescriptor
.java.util.List<java.lang.Integer>
fieldIdsAccessed()
Return the field ids accessed.java.util.Set<java.lang.String>
fieldNamesAccessed()
Return the field names accessed.abstract boolean
getAllFields()
If true, all fields are being accessed.abstract java.util.List<FieldAccessDescriptor.FieldDescriptor>
getFieldsAccessed()
abstract java.util.Map<FieldAccessDescriptor.FieldDescriptor,FieldAccessDescriptor>
getNestedFieldsAccessed()
java.util.Map<java.lang.Integer,FieldAccessDescriptor>
nestedFieldsById()
Return the nested fields keyed by field ids.java.util.Map<java.lang.String,FieldAccessDescriptor>
nestedFieldsByName()
Return the nested fields keyed by field name.boolean
referencesSingleField()
Returns true if this descriptor references only a single, non-wildcard field.FieldAccessDescriptor
resolve(Schema schema)
Resolve theFieldAccessDescriptor
against a schema.java.lang.String
toString()
static FieldAccessDescriptor
union(java.lang.Iterable<FieldAccessDescriptor> fieldAccessDescriptors)
static FieldAccessDescriptor
withAllFields()
static FieldAccessDescriptor
withFieldIds(java.lang.Integer... ids)
Return a descriptor that access the specified fields.static FieldAccessDescriptor
withFieldIds(java.lang.Iterable<java.lang.Integer> ids)
Return a descriptor that access the specified fields.static FieldAccessDescriptor
withFieldIds(FieldAccessDescriptor baseDescriptor, java.lang.Integer... fieldIds)
Return a descriptor that accesses the specified field ids as nested subfields of the baseDescriptor.static FieldAccessDescriptor
withFieldIds(FieldAccessDescriptor baseDescriptor, java.lang.Iterable<java.lang.Integer> fieldIds)
Return a descriptor that accesses the specified field ids as nested subfields of the baseDescriptor.FieldAccessDescriptor
withFieldNameAs(java.lang.String fieldName, java.lang.String fieldRename)
Add a field with a new name.static FieldAccessDescriptor
withFieldNames(java.lang.Iterable<java.lang.String> fieldNames)
Return a descriptor that access the specified fields.static FieldAccessDescriptor
withFieldNames(java.lang.String... names)
Return a descriptor that access the specified fields.static FieldAccessDescriptor
withFieldNames(FieldAccessDescriptor baseDescriptor, java.lang.Iterable<java.lang.String> fieldNames)
Return a descriptor that accesses the specified field names as nested subfields of the baseDescriptor.static FieldAccessDescriptor
withFieldNames(FieldAccessDescriptor baseDescriptor, java.lang.String... fieldNames)
Return a descriptor that accesses the specified field names as nested subfields of the baseDescriptor.static FieldAccessDescriptor
withFieldNamesAs(java.util.Map<java.lang.String,java.lang.String> fieldNamesAs)
Return a descriptor that accesses the specified fields, renaming those fields.static FieldAccessDescriptor
withFields(java.lang.Iterable<FieldAccessDescriptor.FieldDescriptor> fields)
Returns aFieldAccessDescriptor
that accesses the specified fields.static FieldAccessDescriptor
withFields(FieldAccessDescriptor.FieldDescriptor... fields)
Returns aFieldAccessDescriptor
that accesses the specified fields.FieldAccessDescriptor
withNestedField(int nestedFieldId, FieldAccessDescriptor fieldAccess)
Return a descriptor that access the specified nested field.FieldAccessDescriptor
withNestedField(java.lang.String nestedFieldName, FieldAccessDescriptor fieldAccess)
Return a descriptor that access the specified nested field.FieldAccessDescriptor
withNestedField(FieldAccessDescriptor.FieldDescriptor field, FieldAccessDescriptor fieldAccess)
FieldAccessDescriptor
withNestedFieldAs(java.lang.String nestedFieldName, java.lang.String nestedFieldRename, FieldAccessDescriptor fieldAccess)
LikewithNestedField(int, org.apache.beam.sdk.schemas.FieldAccessDescriptor)
along with a rename of the nested field.
-
-
-
Method Detail
-
getAllFields
public abstract boolean getAllFields()
If true, all fields are being accessed.
-
getFieldsAccessed
public abstract java.util.List<FieldAccessDescriptor.FieldDescriptor> getFieldsAccessed()
-
getNestedFieldsAccessed
public abstract java.util.Map<FieldAccessDescriptor.FieldDescriptor,FieldAccessDescriptor> getNestedFieldsAccessed()
-
withAllFields
public static FieldAccessDescriptor withAllFields()
-
withFieldNames
public static FieldAccessDescriptor withFieldNames(java.lang.String... names)
Return a descriptor that access the specified fields.By default, if the field is a nested row (or a container containing a row), all fields of said rows are accessed. The syntax for a field name allows specifying nested fields and wildcards, as specified in the file-level Javadoc. withNestedField can also be called to specify recursive field access.
-
withFieldNames
public static FieldAccessDescriptor withFieldNames(java.lang.Iterable<java.lang.String> fieldNames)
Return a descriptor that access the specified fields.By default, if the field is a nested row (or a container containing a row), all fields of said rows are accessed. The syntax for a field name allows specifying nested fields and wildcards, as specified in the file-level Javadoc. withNestedField can also be called to specify recursive field access.
-
withFieldNamesAs
public static FieldAccessDescriptor withFieldNamesAs(java.util.Map<java.lang.String,java.lang.String> fieldNamesAs)
Return a descriptor that accesses the specified fields, renaming those fields.
-
withFieldNames
public static FieldAccessDescriptor withFieldNames(FieldAccessDescriptor baseDescriptor, java.lang.String... fieldNames)
Return a descriptor that accesses the specified field names as nested subfields of the baseDescriptor.This is only supported when baseDescriptor refers to a single field.
-
withFieldNames
public static FieldAccessDescriptor withFieldNames(FieldAccessDescriptor baseDescriptor, java.lang.Iterable<java.lang.String> fieldNames)
Return a descriptor that accesses the specified field names as nested subfields of the baseDescriptor.This is only supported when baseDescriptor refers to a single field.
-
withFieldIds
public static FieldAccessDescriptor withFieldIds(FieldAccessDescriptor baseDescriptor, java.lang.Integer... fieldIds)
Return a descriptor that accesses the specified field ids as nested subfields of the baseDescriptor.This is only supported when baseDescriptor refers to a single field.
-
withFieldIds
public static FieldAccessDescriptor withFieldIds(FieldAccessDescriptor baseDescriptor, java.lang.Iterable<java.lang.Integer> fieldIds)
Return a descriptor that accesses the specified field ids as nested subfields of the baseDescriptor.This is only supported when baseDescriptor refers to a single field.
-
withFieldIds
public static FieldAccessDescriptor withFieldIds(java.lang.Integer... ids)
Return a descriptor that access the specified fields.By default, if the field is a nested row (or a container containing a row), all fields of said rows are accessed. For finer-grained acccess to nested rows, call withNestedField and pass in a recursive
FieldAccessDescriptor
.
-
withFieldIds
public static FieldAccessDescriptor withFieldIds(java.lang.Iterable<java.lang.Integer> ids)
Return a descriptor that access the specified fields.By default, if the field is a nested row (or a container containing a row), all fields of said rows are accessed. For finer-grained acccess to nested rows, call withNestedField and pass in a recursive
FieldAccessDescriptor
.
-
withFields
public static FieldAccessDescriptor withFields(FieldAccessDescriptor.FieldDescriptor... fields)
Returns aFieldAccessDescriptor
that accesses the specified fields.
-
withFields
public static FieldAccessDescriptor withFields(java.lang.Iterable<FieldAccessDescriptor.FieldDescriptor> fields)
Returns aFieldAccessDescriptor
that accesses the specified fields.
-
union
public static FieldAccessDescriptor union(java.lang.Iterable<FieldAccessDescriptor> fieldAccessDescriptors)
-
create
public static FieldAccessDescriptor create()
Return an emptyFieldAccessDescriptor
.
-
withFieldNameAs
public FieldAccessDescriptor withFieldNameAs(java.lang.String fieldName, java.lang.String fieldRename)
Add a field with a new name. This is only valid if the fieldName references a single field (wildcards are not allowed here).
-
withNestedField
public FieldAccessDescriptor withNestedField(int nestedFieldId, FieldAccessDescriptor fieldAccess)
Return a descriptor that access the specified nested field. The nested field must be of typeSchema.TypeName.ROW
, and the fieldAccess argument specifies what fields of the nested type will be accessed.
-
withNestedField
public FieldAccessDescriptor withNestedField(java.lang.String nestedFieldName, FieldAccessDescriptor fieldAccess)
Return a descriptor that access the specified nested field. The nested field must be of typeSchema.TypeName.ROW
, and the fieldAccess argument specifies what fields of the nested type will be accessed.
-
withNestedFieldAs
public FieldAccessDescriptor withNestedFieldAs(java.lang.String nestedFieldName, java.lang.String nestedFieldRename, FieldAccessDescriptor fieldAccess)
LikewithNestedField(int, org.apache.beam.sdk.schemas.FieldAccessDescriptor)
along with a rename of the nested field.
-
withNestedField
public FieldAccessDescriptor withNestedField(FieldAccessDescriptor.FieldDescriptor field, FieldAccessDescriptor fieldAccess)
-
fieldIdsAccessed
public java.util.List<java.lang.Integer> fieldIdsAccessed()
Return the field ids accessed. Should not be called until afterresolve(org.apache.beam.sdk.schemas.Schema)
is called. Iteration order is consistent withgetFieldsAccessed()
.
-
fieldNamesAccessed
public java.util.Set<java.lang.String> fieldNamesAccessed()
Return the field names accessed. Should not be called until afterresolve(org.apache.beam.sdk.schemas.Schema)
is called.
-
nestedFieldsById
public java.util.Map<java.lang.Integer,FieldAccessDescriptor> nestedFieldsById()
Return the nested fields keyed by field ids. Should not be called until afterresolve(org.apache.beam.sdk.schemas.Schema)
is called.
-
nestedFieldsByName
public java.util.Map<java.lang.String,FieldAccessDescriptor> nestedFieldsByName()
Return the nested fields keyed by field name. Should not be called until afterresolve(org.apache.beam.sdk.schemas.Schema)
is called.
-
referencesSingleField
public boolean referencesSingleField()
Returns true if this descriptor references only a single, non-wildcard field.
-
resolve
public FieldAccessDescriptor resolve(Schema schema)
Resolve theFieldAccessDescriptor
against a schema.Resolve will resolve all of the field names into field ids, validating that all field names specified in the descriptor exist in the actual schema.
-
toString
public final java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
-