@@ -1393,6 +1393,100 @@ func TestIntegration_Load(t *testing.T) {
13931393
13941394}
13951395
1396+ func TestIntegration_LoadWithReferenceSchemaFile (t * testing.T ) {
1397+ if client == nil {
1398+ t .Skip ("Integration tests skipped" )
1399+ }
1400+
1401+ formats := []DataFormat {Avro , Parquet }
1402+ for _ , format := range formats {
1403+ ctx := context .Background ()
1404+ table := dataset .Table (tableIDs .New ())
1405+ defer table .Delete (ctx )
1406+
1407+ expectedSchema := Schema {
1408+ {Name : "username" , Type : StringFieldType , Required : false },
1409+ {Name : "tweet" , Type : StringFieldType , Required : false },
1410+ {Name : "timestamp" , Type : StringFieldType , Required : false },
1411+ {Name : "likes" , Type : IntegerFieldType , Required : false },
1412+ }
1413+ ext := strings .ToLower (string (format ))
1414+ sourceURIs := []string {
1415+ "gs://cloud-samples-data/bigquery/federated-formats-reference-file-schema/a-twitter." + ext ,
1416+ "gs://cloud-samples-data/bigquery/federated-formats-reference-file-schema/b-twitter." + ext ,
1417+ "gs://cloud-samples-data/bigquery/federated-formats-reference-file-schema/c-twitter." + ext ,
1418+ }
1419+ referenceURI := "gs://cloud-samples-data/bigquery/federated-formats-reference-file-schema/a-twitter." + ext
1420+ source := NewGCSReference (sourceURIs ... )
1421+ source .SourceFormat = format
1422+ loader := table .LoaderFrom (source )
1423+ loader .ReferenceFileSchemaURI = referenceURI
1424+ job , err := loader .Run (ctx )
1425+ if err != nil {
1426+ t .Fatalf ("loader.Run: %v" , err )
1427+ }
1428+ err = wait (ctx , job )
1429+ if err != nil {
1430+ t .Fatalf ("wait: %v" , err )
1431+ }
1432+ metadata , err := table .Metadata (ctx )
1433+ if err != nil {
1434+ t .Fatalf ("table.Metadata: %v" , err )
1435+ }
1436+ diff := testutil .Diff (expectedSchema , metadata .Schema )
1437+ if diff != "" {
1438+ t .Errorf ("got=-, want=+:\n %s" , diff )
1439+ }
1440+ }
1441+ }
1442+
1443+ func TestIntegration_ExternalTableWithReferenceSchemaFile (t * testing.T ) {
1444+ if client == nil {
1445+ t .Skip ("Integration tests skipped" )
1446+ }
1447+
1448+ formats := []DataFormat {Avro , Parquet }
1449+ for _ , format := range formats {
1450+ ctx := context .Background ()
1451+ externalTable := dataset .Table (tableIDs .New ())
1452+ defer externalTable .Delete (ctx )
1453+
1454+ expectedSchema := Schema {
1455+ {Name : "username" , Type : StringFieldType , Required : false },
1456+ {Name : "tweet" , Type : StringFieldType , Required : false },
1457+ {Name : "timestamp" , Type : StringFieldType , Required : false },
1458+ {Name : "likes" , Type : IntegerFieldType , Required : false },
1459+ }
1460+ ext := strings .ToLower (string (format ))
1461+ sourceURIs := []string {
1462+ "gs://cloud-samples-data/bigquery/federated-formats-reference-file-schema/a-twitter." + ext ,
1463+ "gs://cloud-samples-data/bigquery/federated-formats-reference-file-schema/b-twitter." + ext ,
1464+ "gs://cloud-samples-data/bigquery/federated-formats-reference-file-schema/c-twitter." + ext ,
1465+ }
1466+ referenceURI := "gs://cloud-samples-data/bigquery/federated-formats-reference-file-schema/a-twitter." + ext
1467+
1468+ err := externalTable .Create (ctx , & TableMetadata {
1469+ ExternalDataConfig : & ExternalDataConfig {
1470+ SourceFormat : format ,
1471+ SourceURIs : sourceURIs ,
1472+ ReferenceFileSchemaURI : referenceURI ,
1473+ },
1474+ })
1475+ if err != nil {
1476+ t .Fatalf ("table.Create: %v" , err )
1477+ }
1478+
1479+ metadata , err := externalTable .Metadata (ctx )
1480+ if err != nil {
1481+ t .Fatalf ("table.Metadata: %v" , err )
1482+ }
1483+ diff := testutil .Diff (expectedSchema , metadata .Schema )
1484+ if diff != "" {
1485+ t .Errorf ("got=-, want=+:\n %s" , diff )
1486+ }
1487+ }
1488+ }
1489+
13961490func TestIntegration_DML (t * testing.T ) {
13971491 if client == nil {
13981492 t .Skip ("Integration tests skipped" )
0 commit comments