@@ -32,17 +32,16 @@ import org.joda.time.format.{DateTimeFormat, DateTimeFormatterBuilder}
32
32
33
33
import java .math .MathContext
34
34
import java .nio .ByteBuffer
35
+ import scala .annotation .unused
35
36
import scala .jdk .CollectionConverters ._
36
37
37
38
sealed trait Source {
38
- protected type Impl <: Source
39
- def latest (bq : BigQuery ): Impl
40
- def latest (): Impl = latest(BigQuery .defaultInstance())
39
+ def latest (bq : BigQuery ): Source
40
+ def latest (): Source = latest(BigQuery .defaultInstance())
41
41
}
42
42
43
43
/** A wrapper type [[Query ]] which wraps a SQL String. */
44
44
final case class Query (underlying : String ) extends Source {
45
- override protected type Impl = Query
46
45
47
46
/**
48
47
* A helper method to replace the "$LATEST" placeholder in query to the latest common partition.
@@ -73,21 +72,22 @@ final case class Query(underlying: String) extends Source {
73
72
}
74
73
75
74
/**
76
- * Bigquery [[Table ]]. Tables can be referenced by a table spec `String` or by a table reference
77
- * [[GTableReference ]]. An additional [[Table.Filter ]] can be given to specify selected fields and
78
- * row restrictions when used with the BQ storage read API.
75
+ * Bigquery [[Table ]] abstracts the multiple ways of referencing Bigquery tables. Tables can be
76
+ * referenced by a table spec `String` or by a table reference [[GTableReference ]]. An additional
77
+ * [[Table.Filter ]] can be given to specify selected fields and row restrictions when used with the
78
+ * BQ storage read API.
79
79
*
80
80
* Example: Create a [[Table ]] from a [[GTableReference ]]:
81
81
* {{{
82
82
* val tableReference = new TableReference
83
83
* tableReference.setProjectId("bigquery-public-data")
84
84
* tableReference.setDatasetId("samples")
85
85
* tableReference.setTableId("shakespeare")
86
- * val table = Table(tableReference)
86
+ * val table = Table.Ref (tableReference)
87
87
* }}}
88
88
* or with a spec string with filtering:
89
89
* {{{
90
- * val table = Table(
90
+ * val table = Table.Spec (
91
91
* "bigquery-public-data:samples.shakespeare",
92
92
* List("word", "word_count"),
93
93
* "word_count > 10"
@@ -101,9 +101,8 @@ final case class Query(underlying: String) extends Source {
101
101
* }}}
102
102
*/
103
103
case class Table private (ref : GTableReference , filter : Option [Table .Filter ]) extends Source {
104
- override protected type Impl = Table
105
104
lazy val spec : String = BigQueryHelpers .toTableSpec(ref)
106
- def latest (bq : BigQuery ): Table = {
105
+ override def latest (bq : BigQuery ): Source = {
107
106
val latestSpec = BigQueryPartitionUtil .latestTable(bq, spec)
108
107
val latestRef = BigQueryHelpers .parseTableSpec(latestSpec)
109
108
copy(latestRef)
@@ -151,40 +150,43 @@ object Table {
151
150
rowRestriction : Option [String ]
152
151
)
153
152
154
- def apply (ref : GTableReference ): Table =
153
+ @ unused private def apply (ref : GTableReference , filter : Option [Table .Filter ]): Table =
154
+ new Table (ref, filter)
155
+
156
+ def Ref (ref : GTableReference ): Table =
155
157
new Table (ref, None )
156
158
157
- def apply (ref : GTableReference , selectedFields : List [String ]): Table =
159
+ def Ref (ref : GTableReference , selectedFields : List [String ]): Table =
158
160
new Table (ref, Some (Filter (selectedFields, None )))
159
161
160
- def apply (ref : GTableReference , rowRestriction : String ): Table =
162
+ def Ref (ref : GTableReference , rowRestriction : String ): Table =
161
163
new Table (ref, Some (Filter (List .empty, Some (rowRestriction))))
162
164
163
- def apply (ref : GTableReference , selectedFields : List [String ], rowRestriction : String ): Table =
165
+ def Ref (ref : GTableReference , selectedFields : List [String ], rowRestriction : String ): Table =
164
166
new Table (ref, Some (Filter (selectedFields, Some (rowRestriction))))
165
167
166
- def apply (ref : GTableReference , filter : Table .Filter ): Table =
168
+ def Ref (ref : GTableReference , filter : Table .Filter ): Table =
167
169
new Table (ref, Some (filter))
168
170
169
- def apply (spec : String ): Table =
171
+ def Spec (spec : String ): Table =
170
172
new Table (BigQueryHelpers .parseTableSpec(spec), None )
171
173
172
- def apply (spec : String , selectedFields : List [String ]): Table =
174
+ def Spec (spec : String , selectedFields : List [String ]): Table =
173
175
new Table (BigQueryHelpers .parseTableSpec(spec), Some (Filter (selectedFields, None )))
174
176
175
- def apply (spec : String , rowRestriction : String ): Table =
177
+ def Spec (spec : String , rowRestriction : String ): Table =
176
178
new Table (BigQueryHelpers .parseTableSpec(spec), Some (Filter (List .empty, Some (rowRestriction))))
177
179
178
- def apply (spec : String , selectedFields : List [String ], rowRestriction : String ): Table =
180
+ def Spec (spec : String , selectedFields : List [String ], rowRestriction : String ): Table =
179
181
new Table (
180
182
BigQueryHelpers .parseTableSpec(spec),
181
183
Some (Filter (selectedFields, Some (rowRestriction)))
182
184
)
183
185
184
- def apply (spec : String , filter : Table .Filter ): Table =
186
+ def Spec (spec : String , filter : Table .Filter ): Table =
185
187
new Table (BigQueryHelpers .parseTableSpec(spec), Some (filter))
186
188
187
- def apply (spec : String , filter : Option [Table .Filter ]): Table =
189
+ def Spec (spec : String , filter : Option [Table .Filter ]): Table =
188
190
new Table (BigQueryHelpers .parseTableSpec(spec), filter)
189
191
}
190
192
0 commit comments