@@ -1213,6 +1213,84 @@ public void testBigQueryQuerySourceInitSplit() throws Exception {
12131213 .createDataset (anyString (), anyString (), anyString (), anyString ());
12141214 }
12151215
1216+ @ Test
1217+ public void testBigQueryNoTableQuerySourceInitSplit () throws Exception {
1218+ TableReference dryRunTable = new TableReference ();
1219+
1220+ Job queryJob = new Job ();
1221+ JobStatistics queryJobStats = new JobStatistics ();
1222+ JobStatistics2 queryStats = new JobStatistics2 ();
1223+ queryStats .setReferencedTables (ImmutableList .of (dryRunTable ));
1224+ queryJobStats .setQuery (queryStats );
1225+ queryJob .setStatus (new JobStatus ())
1226+ .setStatistics (queryJobStats );
1227+
1228+ Job extractJob = new Job ();
1229+ JobStatistics extractJobStats = new JobStatistics ();
1230+ JobStatistics4 extractStats = new JobStatistics4 ();
1231+ extractStats .setDestinationUriFileCounts (ImmutableList .of (1L ));
1232+ extractJobStats .setExtract (extractStats );
1233+ extractJob .setStatus (new JobStatus ())
1234+ .setStatistics (extractJobStats );
1235+
1236+ FakeBigQueryServices fakeBqServices = new FakeBigQueryServices ()
1237+ .withJobService (mockJobService )
1238+ .withDatasetService (mockDatasetService )
1239+ .readerReturns (
1240+ toJsonString (new TableRow ().set ("name" , "a" ).set ("number" , "1" )),
1241+ toJsonString (new TableRow ().set ("name" , "b" ).set ("number" , "2" )),
1242+ toJsonString (new TableRow ().set ("name" , "c" ).set ("number" , "3" )));
1243+
1244+ String jobIdToken = "testJobIdToken" ;
1245+ String extractDestinationDir = "mock://tempLocation" ;
1246+ TableReference destinationTable = BigQueryIO .parseTableSpec ("project:data_set.table_name" );
1247+ BoundedSource <TableRow > bqSource = BigQueryQuerySource .create (
1248+ jobIdToken , "query" , destinationTable , true /* flattenResults */ , true /* useLegacySql */ ,
1249+ extractDestinationDir , fakeBqServices );
1250+
1251+ List <TableRow > expected = ImmutableList .of (
1252+ new TableRow ().set ("name" , "a" ).set ("number" , "1" ),
1253+ new TableRow ().set ("name" , "b" ).set ("number" , "2" ),
1254+ new TableRow ().set ("name" , "c" ).set ("number" , "3" ));
1255+
1256+ PipelineOptions options = PipelineOptionsFactory .create ();
1257+ options .setTempLocation (extractDestinationDir );
1258+
1259+ when (mockJobService .dryRunQuery (anyString (), anyString ()))
1260+ .thenReturn (new JobStatistics ().setQuery (
1261+ new JobStatistics2 ()
1262+ .setTotalBytesProcessed (100L )));
1263+ when (mockDatasetService .getTable (
1264+ eq (destinationTable .getProjectId ()),
1265+ eq (destinationTable .getDatasetId ()),
1266+ eq (destinationTable .getTableId ())))
1267+ .thenReturn (new Table ().setSchema (new TableSchema ()));
1268+ IOChannelUtils .setIOFactory ("mock" , mockIOChannelFactory );
1269+ when (mockIOChannelFactory .resolve (anyString (), anyString ()))
1270+ .thenReturn ("mock://tempLocation/output" );
1271+ when (mockJobService .pollJob (Mockito .<JobReference >any (), Mockito .anyInt ()))
1272+ .thenReturn (extractJob );
1273+
1274+ Assert .assertThat (
1275+ SourceTestUtils .readFromSource (bqSource , options ),
1276+ CoreMatchers .is (expected ));
1277+ SourceTestUtils .assertSplitAtFractionBehavior (
1278+ bqSource , 2 , 0.3 , ExpectedSplitOutcome .MUST_BE_CONSISTENT_IF_SUCCEEDS , options );
1279+
1280+ List <? extends BoundedSource <TableRow >> sources = bqSource .splitIntoBundles (100 , options );
1281+ assertEquals (1 , sources .size ());
1282+ BoundedSource <TableRow > actual = sources .get (0 );
1283+ assertThat (actual , CoreMatchers .instanceOf (TransformingSource .class ));
1284+
1285+ Mockito .verify (mockJobService )
1286+ .startQueryJob (
1287+ Mockito .<JobReference >any (), Mockito .<JobConfigurationQuery >any ());
1288+ Mockito .verify (mockJobService )
1289+ .startExtractJob (Mockito .<JobReference >any (), Mockito .<JobConfigurationExtract >any ());
1290+ Mockito .verify (mockDatasetService )
1291+ .createDataset (anyString (), anyString (), anyString (), anyString ());
1292+ }
1293+
12161294 @ Test
12171295 public void testTransformingSource () throws Exception {
12181296 int numElements = 10000 ;
0 commit comments