Prijzen voor BigQuery

Raadpleeg deze pagina voor BigQuery-prijzen.

Raadpleeg de pagina Prijzen voor BigQuery ML voor BigQuery ML.

Raadpleeg de pagina Prijzen voor BigQuery Data Transfer Service voor BigQuery Data Transfer Service.

Overzicht

BigQuery biedt u schaalbare, flexibele prijsopties die passen bij uw technische behoeften en budget.

De opslagkosten zijn gebaseerd op de hoeveelheid gegevens die wordt opgeslagen in BigQuery. Ze zijn als volgt samengesteld:

  • Actief: Een maandelijks bedrag voor gegevens die zijn opgeslagen in tabellen of in partities die de afgelopen 90 dagen zijn gewijzigd.
  • Lange termijn: Een lager maandelijks bedrag voor gegevens die zijn opgeslagen in tabellen of in partities die de afgelopen 90 dagen niet zijn gewijzigd.

U heeft voor de querykosten de keuze uit twee prijsmodellen:

  • On demand: Dit is de meest flexibele optie. On demand-prijzen zijn gebaseerd op de hoeveelheid gegevens die door elke query wordt verwerkt.
  • Flatrate: Deze voorspelbare prijsoptie is het beste voor klanten met een vast budget. Flatrate-klanten kopen toegewezen resources voor het verwerken van query's en afzonderlijke query's worden niet in rekening gebracht.

Zie SKU's van Google Cloud voor meer informatie over de prijzen voor opslag en query's. Houd er rekening mee dat on demand-prijzen voor query's 'analyseprijzen' worden genoemd op de pagina SKU's.

Prijsoverzicht

In de volgende tabel worden de BigQuery-prijzen vermeld. Op deze bewerkingen zijn de quota en limieten van BigQuery van toepassing.

Hoe kosten in rekening worden gebracht

Aan elk project dat u maakt, is een factureringsaccount gekoppeld. Alle kosten die worden gemaakt voor BigQuery-taken die in het project worden uitgevoerd, worden in rekening gebracht op het gekoppelde factureringsaccount. BigQuery-opslagkosten worden ook gefactureerd via het gekoppelde factureringsaccount.

Factureringsgegevens analyseren

U kunt de BigQuery-kosten en -trends bekijken op de pagina Cloud-factureringsrapporten in de Cloud Console. Ga naar Uw kostentrends bekijken met factureringsrapporten voor meer informatie over het analyseren van factureringsgegevens met behulp van rapporten.

Zie Factureringsgegevens exporteren naar BigQuery in de Documentatie over Cloud-facturering voor meer informatie over de analyse van factureringsgegevens in BigQuery.

Gratis bewerkingen

In de volgende tabel ziet u de BigQuery-bewerkingen die u op elke locatie gratis kunt uitvoeren. Op deze bewerkingen zijn de quota en limieten van BigQuery van toepassing.

Bewerking Details
Gegevens laden

Wanneer u vanuit Cloud Storage gegevens in BigQuery laadt, worden geen kosten in rekening gebracht voor het laden, maar wel voor de opslag van de gegevens in Cloud Storage. Ga naar Gegevensopslag op de pagina met Cloud Storage-prijzen voor meer informatie. Zodra de gegevens in BigQuery zijn geladen, gelden de opslagprijzen van BigQuery voor de gegevens. Ga naar Gegevens in BigQuery laden voor meer informatie.

Wanneer u een dataset in BigQuery maakt, moet u een locatie voor de gegevens kiezen. Als u US kiest, kunt u gegevens in tabellen in de dataset laden vanuit een Cloud Storage-bucket in een andere regio. Wanneer u gegevens uit een andere regio in een US-dataset laadt, zijn er momenteel geen kosten voor uitgaand internetverkeer.

Als u een andere locatie dan US kiest, heeft u twee opties:

  • Gegevens laden vanuit een Cloud Storage-bucket in die regio (dit kan een bucket met meerdere regio's zijn of een regionale bucket die zich in dezelfde regio als de dataset bevindt)
  • De gegevens kopiëren naar een bucket in die regio

Wanneer u gegevens van de ene Cloud Storage-regio naar de andere kopieert, zijn de netwerkprijzen van Cloud Storage van toepassing.

Gegevens kopiëren Er worden geen kosten in rekening gebracht voor het kopiëren van een tabel, maar wel voor de opslag van de nieuwe en de gekopieerde tabel. Ga naar Een bestaande tabel kopiëren voor meer informatie.
Gegevens exporteren Er worden geen kosten in rekening gebracht wanneer u gegevens uit BigQuery naar Cloud Storage exporteert, maar wel als u de gegevens in Cloud Storage opslaat. Ga naar Gegevensopslag op de pagina met Cloud Storage-prijzen voor meer informatie. Zie Gegevens uit BigQuery exporteren voor meer informatie.
Datasets verwijderen Er worden geen kosten in rekening gebracht wanneer u een dataset verwijdert.
Tabellen, weergaven, partities en functies verwijderen Er worden geen kosten in rekening gebracht wanneer u een tabel, een weergave, afzonderlijke tabelpartities of een door een gebruiker gedefinieerde functie verwijdert.
Bewerkingen met metadata Er worden geen kosten in rekening gebracht voor list-, get-, patch-, update- en delete-aanroepen. Voorbeelden zijn (maar zijn niet beperkt tot): datasets weergeven, de toegangscontrolelijst van een dataset updaten, de beschrijving van een tabel updaten of door gebruikers gedefinieerde functies in een dataset weergeven.
Pseudokolommen lezen Er worden geen kosten in rekening gebracht als u de content van de volgende pseudokolommen doorzoekt:
_TABLE_SUFFIX: wordt gebruikt wanneer u query's uitvoert in jokertekentabellen of voor de semantiek van tabeldecorators in standaard SQL _PARTITIONDATE: wordt gebruikt wanneer u query's uitvoert in tabellen die zijn gepartitioneerd op basis van de verwerkingstijd _PARTITIONTIME: wordt gebruikt wanneer u query's uitvoert in tabellen die zijn gepartitioneerd op basis van de verwerkingstijd _FILE_NAME: wordt gebruikt wanneer u query's uitvoert in tabellen die zijn samengesteld op basis van externe gegevensbronnen
Metatabellen lezen Er worden geen kosten in rekening gebracht als u de content van de volgende metatabellen doorzoekt:
__PARTITIONS_SUMMARY__: wordt gebruikt wanneer u metadata over partities ophaalt in een gepartitioneerde tabel of een op basis van verwerkingstijd gepartitioneerde tabel __TABLES_SUMMARY__: wordt gebruikt wanneer u metadata over de tabellen en weergaven in een dataset ophaalt
UDF's maken, vervangen of aanroepen Er worden momenteel geen kosten in rekening gebracht voor het maken, vervangen of aanroepen van persistente UDF's (User-Defined Functions; door gebruikers gedefinieerde functies). Persistente UDF's bevinden zich momenteel in de bètafase. Prijzen kunnen worden gewijzigd.

Gebruikslimieten voor Always Free

Als onderdeel van de Free Tier van Google Cloud kunt u bepaalde resources in BigQuery tot een bepaalde limiet gratis gebruiken. Deze beperkingen voor gratis gebruik gelden zowel tijdens als na de kosteloze proefperiode. Als u na de kosteloze proefperiode deze gebruikslimieten overschrijdt, worden kosten in rekening gebracht volgens het prijsschema op deze pagina.

Resource Maandelijkse limiet voor gratis gebruik Details
Opslag De eerste 10 GB per maand zijn gratis. De gratis tier voor BigQuery-opslag omvat BigQuery ML-modellen en trainingsgegevens die in BigQuery zijn opgeslagen.
Query's (analyse) De eerste 1 TB aan verwerkte querygegevens per maand is gratis. De gratis tier voor BigQuery-analyse omvat query's die BigQuery ML-functies voor voorspelling, inspectie en evaluatie gebruiken, maar geen BigQuery ML-query's met CREATE MODEL-instructies.
Voor klanten met een groot volume die liever stabiele maandelijkse kosten willen, zijn flatrate-prijzen mogelijk.
BigQuery ML CREATE MODEL-query's De eerste 10 GB aan gegevens die per maand worden verwerkt door query's met CREATE MODEL-instructies, zijn gratis. BigQuery ML CREATE MODEL-query's staan los van de gratis BigQuery-tier voor analyse.

Queryprijzen

Queryprijzen hebben betrekking op de kosten voor het uitvoeren van SQL-opdrachten en door de gebruiker gedefinieerde functies, plus in aanmerking komende DML-instructies (Data Manipulation Language) en DDL-instructies (Data Definition Language).

Bij BigQuery heeft u de keuze uit twee prijsmodellen:

  • On demand-prijzen zijn flexibel en efficiënt. U betaalt alleen voor de query's die u uitvoert.
  • Flatrate-prijzen bieden voorspelbare kosten die elke maand hetzelfde zijn.

U wordt standaard gefactureerd volgens het on demand-prijsmodel. U kunt een prijsmodel kiezen dat aan uw behoeften voldoet. U kunt ook de twee prijsmodellen combineren voor elk project en elke locatie.

On demand-prijzen

Bij on demand-prijzen brengt BigQuery kosten voor query's in rekening op basis van één statistiek: het aantal verwerkte bytes (oftewel gelezen bytes). U betaalt voor het aantal verwerkte bytes, ongeacht of de gegevens zijn opgeslagen in BigQuery of in een externe gegevensbron, zoals Cloud Storage, Google Drive of Bigtable. On demand-prijzen worden alleen op basis van het verbruik berekend.

De on-demandprijzen zijn als volgt:

Let op de volgende punten met betrekking tot querykosten:

  • BigQuery gebruikt een gegevensstructuur met kolommen. Er worden kosten in rekening gebracht op basis van de totale hoeveelheid verwerkte gegevens in de kolommen die u selecteert. De totale hoeveelheid gegevens per kolom wordt berekend op basis van de gegevenstypen in de kolom. Zie Berekening van de gegevensgrootte voor meer informatie over de manier waarop uw gegevensgrootte wordt berekend.
  • Er worden geen kosten in rekening gebracht voor query's die een foutmelding retourneren of voor query's waarbij resultaten uit het cachegeheugen worden opgehaald.
  • De kosten worden afgerond naar de dichtstbijzijnde MB, met minimaal 10 MB aan verwerkte gegevens per tabel die door de query wordt geraadpleegd, en met minimaal 10 MB aan verwerkte gegevens per query.
  • Als u een actieve querytaak annuleert, worden mogelijk de kosten van de volledige query in rekening gebracht alsof deze zou zijn voltooid.
  • Wanneer u een query uitvoert, worden kosten in rekening gebracht op basis van de verwerkte gegevens in de kolommen die u selecteert, zelfs als u een expliciete LIMIT instelt op de resultaten.
  • Door tabellen te partitioneren en te clusteren, kunt u de hoeveelheid gegevens verminderen die door query's wordt verwerkt. Het wordt aanbevolen wanneer dat mogelijk is te partitioneren en te clusteren.
  • Op de pagina Google Cloud Platform SKU's worden on demand-prijzen voor query's 'analyseprijzen' genoemd.

On-demandkosten beheersen

BigQuery biedt manieren om uw kosten te beheersen, waarmee u een limiet voor uw querykosten kunt instellen. U kunt het volgende instellen:

Query's uitvoeren op Cloud Storage-gegevens

Wanneer u query's uitvoert in een externe gegevensbron van BigQuery worden kosten in rekening gebracht voor het aantal bytes dat door de query is gelezen. Zie Queryprijzen voor meer informatie. U betaalt ook voor de opslag van de gegevens in Cloud Storage. Zie Prijzen voor Cloud Storage voor meer informatie.

Query's uitvoeren op kolommen in Cloud Storage

Als uw externe gegevens zijn opgeslagen in ORC of Parquet wordt het aantal in rekening gebrachte bytes beperkt door de kolommen die BigQuery leest. Omdat de gegevenstypen van een externe gegevensbron door de query worden omgezet naar BigQuery-gegevenstypen, wordt het aantal gelezen bytes berekend op basis van de grootte van de BigQuery-gegevenstypen. Meer informatie over conversies van gegevenstypen vindt u op de volgende pagina's:

Prijzen voor extern gepartitioneerde gegevens op Cloud Storage

Er worden extra kosten in rekening gebracht voor het uitvoeren van query's op met Hive gepartitioneerde tabellen die zijn opgeslagen in Cloud Storage.

BigQuery berekent de som van de lengtes van de niet-opgeschoonde bestandsnamen in bytes. De totale kosten voor Hive-partitionering worden afgerond naar de dichtstbijzijnde MB, met minimaal 10 MB aan verwerkte gegevens per met Hive gepartitioneerde tabel in de query.

Flatrate

BigQuery biedt flatrate-prijzen voor klanten die liever niet de on demand-prijs per TB aan verwerkte gegevens betalen, maar de voorkeur geven aan stabiele maandelijkse kosten voor query's.

U kunt ervoor kiezen om flatrate-prijzen te gebruiken met BigQuery-reserveringen.

Als u voor flatrate-prijzen kiest, koopt u slottoewijzingen, d.w.z. toegewezen capaciteit voor het verwerken van query's, die in BigQuery-slots worden gemeten. Uw query's gebruiken deze capaciteit en er worden geen kosten in rekening gebracht voor de verwerkte bytes. Als uw benodigde capaciteit uw toegewezen capaciteit overschrijdt, zal BigQuery slots in de wachtrij zetten en worden er geen extra kosten in rekening gebracht. Kijk bij BigQuery-slots voor meer informatie over hoe BigQuery slots gebruikt voor het verwerken van query's.

Flatrate-prijzen:

  • Gelden voor query-kosten, inclusief BigQuery ML-, DML- en DDL-instructies.
  • Gelden niet voor de kosten voor opslag, streamen van inkomend verkeer of BI Engine.
  • kunt u kopen als een regionale resource. Slottoewijzingen die u in de ene regio koopt, kunt u niet gebruiken in een andere regio. U kunt ze ook niet verplaatsen.
  • maken het mogelijk voor klanten om gelijktijdigheids-quota per project te verhogen door contact op te nemen met Google Cloud Platform-support.
  • zijn beschikbaar als maandelijks en jaarlijks abonnement.
  • Kunnen worden gedeeld door uw hele organisatie. U hoeft geen slottoewijzingen per project te kopen.

Maandelijkse flatrate-toewijzingen

U kiest voor flatrate-prijzen door slottoewijzingen te kopen die worden gemeten in BigQuery-slots. Slottoewijzingen zijn er vanaf 500 slots. U betaalt per seconde gedurende de periode voor vastgelegd gebruik. In de volgende tabel ziet u de kosten voor uw maandelijkse slottoewijzing.

Jaarlijkse flatrate-toewijzingen

U kiest voor flatrate-prijzen door slottoewijzingen te kopen die worden gemeten in BigQuery-slots. Slottoewijzingen zijn er vanaf 500 slots. In de volgende tabel ziet u de kosten voor uw jaarlijkse slottoewijzing. Als u voor een jaarlijkse toewijzing kiest, worden de kosten per seconde in rekening gebracht gedurende de periode van uw toewijzing.

Opslagprijzen

Zodra uw gegevens in BigQuery zijn geladen, worden kosten in rekening gebracht voor de opslag ervan. De opslagprijzen zijn gebaseerd op de niet-gecomprimeerde hoeveelheid gegevens die u opslaat in uw tabellen.

De hoeveelheid gegevens wordt berekend op basis van de gegevenstypen in de afzonderlijke kolommen. Zie Berekening van de gegevensgrootte voor een uitgebreide uitleg over de manier waarop uw gegevensgrootte wordt berekend.

Actieve opslag

De actieve opslagkosten zijn als volgt:

Opslagprijzen worden pro rato in rekening gebracht per MB, per seconde. Als u bijvoorbeeld opslag wilt voor:

  • 100 MB gedurende een halve maand, betaalt u $ 0,001 (een tiende cent),
  • 500 GB gedurende een halve maand, betaalt u $ 5,
  • 1 TB gedurende een volledige maand, betaalt u $ 20

Opslag op lange termijn

Als een tabel gedurende 90 opeenvolgende dagen niet wordt bewerkt, daalt de opslagprijs voor die tabel automatisch met ongeveer 50 procent. Er is geen sprake van verslechtering van de prestaties, duurzaamheid, beschikbaarheid of enige andere functionaliteit wanneer een tabel wordt beschouwd als opslag op lange termijn.

De prijzen voor opslag op lange termijn zijn als volgt:

Zodra de tabel wordt bewerkt, wordt weer de normale opslagprijs gehanteerd en begint de timer van 90 dagen opnieuw te tellen vanaf nul. De timer wordt gereset door elke bewerking waarmee de gegevens in een tabel worden gewijzigd, zoals:

Actie Details
Gegevens in een tabel laden Elke laad- of querybewerking die gegevens toevoegt aan een doeltabel of een doeltabel overschrijft.
Gegevens naar een tabel kopiëren Elke kopieerbewerking die gegevens toevoegt aan een doeltabel of een doeltabel overschrijft.
Queryresultaten in een tabel schrijven Elke querybewerking die gegevens toevoegt aan een doeltabel of een doeltabel overschrijft.
De Data Manipulation Language (DML) gebruiken Een DML-instructie gebruiken om de gegevens in een tabel te bewerken.
Data Definition Language (DDL) gebruiken De DDL-instructie 'CREATE OR REPLACE TABLE' gebruiken om een tabel te vervangen.
Gegevens naar een tabel streamen Gegevens verwerken met de API-aanroep tabledata.insertAll.

Bij alle andere acties wordt de timer niet gereset:

  • Query's in een tabel uitvoeren
  • Een weergave maken die een query in een tabel uitvoert
  • Gegevens uit een tabel exporteren
  • Een tabel kopiëren (naar een andere doeltabel)
  • Een tabelresource patchen of updaten

Elke partitie van een gepartitioneerde tabel wordt afzonderlijk beschouwd voor prijzen voor opslag op lange termijn. Als een partitie de afgelopen 90 dagen niet is gewijzigd, worden de gegevens in die partitie als opslag op lange termijn beschouwd. Hiervoor worden dan kosten in rekening gebracht volgens de gereduceerde prijs.

Voor tabellen die tijdens een factureringscyclus de drempel van 90 dagen bereiken, wordt de prijs pro rato in rekening gebracht.

Prijzen voor opslag op lange termijn zijn alleen van toepassing op BigQuery-opslag, niet op gegevens die in externe gegevensbronnen zoals Cloud Bigtable, Cloud Storage of Google Drive zijn opgeslagen.

Prijzen voor de BigQuery Storage API

Voor de BigQuery Storage API geldt een on demand-prijsmodel. Er worden kosten in rekening gebracht voor gelezen gegevens. Klanten met flatrate-prijzen kunnen de BigQuery Storage API gebruiken om kosteloos tot 300 TB aan gegevens per maand te lezen. Leesbewerkingen van meer dan 300 TB per maand worden gefactureerd tegen de on demand-prijzen.

On demand-prijzen

Bij on demand-prijzen zijn de BigQuery Storage API-kosten gebaseerd op het aantal bytes dat uit de BigQuery-opslag wordt gelezen door aanroepen naar ReadRows.

Onder het aantal gelezen bytes vallen ook gegevens die zijn gebruikt om te filteren maar die niet als uitvoer aan u zijn geretourneerd vanuit ReadRows. Er worden geen kosten in rekening gebracht voor gegevens die zijn gelezen uit tijdelijke tabellen.

De on demand-prijzen voor BigQuery Storage API zijn als volgt:

Let op de volgende punten met betrekking tot BigQuery Storage API-kosten:

  • Er worden kosten in rekening gebracht voor het totaal aan gelezen gegevens. Het totaal aan gelezen gegevens per kolom wordt berekend aan de hand van het type gegevens in de kolom. De omvang van de gegevens wordt berekend op basis van het gegevenstype van de kolom. Zie Berekening van de gegevensgrootte voor een uitgebreide uitleg over de manier waarop de gegevensomvang wordt berekend.
  • Er worden kosten in rekening gebracht voor gegevens die tijdens een leessessie worden gelezen, zelfs als een ReadRows-aanroep mislukt.
  • Als u een ReadRows-aanroep annuleert voordat het einde van de stream is bereikt, worden er kosten in rekening gebracht voor de gegevens die vóór het annuleren zijn gelezen. Er kunnen kosten in rekening worden gebracht voor gegevens die zijn gelezen maar die niet aan u zijn geretourneerd voordat de ReadRows-aanroep werd beëindigd.
  • Waar mogelijk kunt u het beste gepartitioneerde en geclusterde tabellen gebruiken. U kunt de hoeveelheid gelezen gegevens beperken door partities op te schonen met een WHERE-clausule. Zie Query's uitvoeren op gepartitioneerde tabellen voor meer informatie.

Berekening van de gegevensgrootte

Wanneer u gegevens in BigQuery laadt of query's uitvoert op de gegevens, worden kosten in rekening gebracht op basis van de gegevensgrootte. De gegevensgrootte wordt berekend op basis van de grootte van het gegevenstype in elke kolom.

De hoeveelheid opgeslagen gegevens en de hoeveelheid gegevens die uw query's verwerken, worden berekend in gigabytes (GB), waarbij 1 GB gelijk is aan 230 bytes. Deze maateenheid staat ook bekend als een gibibyte (GiB). Op dezelfde wijze is 1 TB gelijk aan 240 bytes (1024 GB).

De grootte van de gegevenstypen in BigQuery is als volgt:

Gegevenstype Grootte
INT64/INTEGER 8 bytes
FLOAT64/FLOAT 8 bytes
NUMERIC 16 bytes
BOOL/BOOLEAN 1 byte
STRING 2 bytes + de grootte van de UTF-8-gecodeerde tekenreeks
BYTES 2 bytes + het aantal bytes in de waarde
DATE 8 bytes
DATETIME 8 bytes
TIME 8 bytes
TIMESTAMP 8 bytes
STRUCT/RECORD 0 bytes + de grootte van de ingesloten velden
GEOGRAPHY 16 bytes + 24 bytes * het aantal hoekpunten in het geografietype (u kunt het aantal hoekpunten verifiëren met de functie ST_NumPoints)

Null-waarden voor elk gegevenstype worden berekend als 0 bytes.

Een herhaalde kolom wordt opgeslagen als matrix. De grootte wordt berekend op basis van het aantal waarden. Bijvoorbeeld: een integer-kolom (INT64) die wordt herhaald (ARRAY<INT64>) en vier items bevat, wordt berekend als 32 bytes (4 items x 8 bytes).

Streamingprijzen

Het laden van gegevens in BigQuery is gratis, met uitzondering van een kleine vergoeding voor gestreamde gegevens.

De prijzen voor invoeging via streaming zijn als volgt:

Prijzen voor Data Manipulation Language

Bij BigQuery worden kosten voor DML-query's in rekening gebracht op basis van het aantal bytes dat door de query wordt verwerkt.

DML-prijzen voor niet-gepartitioneerde tabellen

Voor niet-gepartitioneerde tabellen wordt het aantal verwerkte bytes als volgt berekend:

DML-instructie Verwerkte bytes
INSERT De som van verwerkte bytes voor alle kolommen waarnaar wordt verwezen in de tabellen die door de query zijn gescand.
UPDATE De som van bytes in alle kolommen waarnaar wordt verwezen in de tabellen die door de query zijn gescand
+ de som van bytes voor alle kolommen in de geüpdate tabel op het moment dat de instructie UPDATE wordt gestart.
DELETE De som van bytes in alle kolommen waarnaar wordt verwezen in de tabellen die door de query zijn gescand
+ de som van bytes voor alle kolommen in de gewijzigde tabel op het moment dat de instructie DELETE wordt gestart.
MERGE Als er alleen INSERT-bepalingen in de MERGE-instructie voorkomen, worden kosten in rekening gebracht voor de som van verwerkte bytes voor alle kolommen waarnaar wordt verwezen in alle tabellen die door de query zijn gescand.
Als er een UPDATE- of DELETE-bepaling in de MERGE-instructie voorkomt, worden kosten in rekening gebracht voor de som van de verwerkte bytes voor alle kolommen waarnaar wordt verwezen in de brontabellen die door de query zijn gescand
+ de som van bytes voor alle kolommen in de doeltabel (op het moment dat de instructie MERGE wordt gestart).

DML-prijzen voor gepartitioneerde tabellen

Voor gepartitioneerde tabellen wordt het aantal verwerkte bytes als volgt berekend:

DML-instructie Verwerkte bytes
INSERT De som van verwerkte bytes voor alle kolommen waarnaar wordt verwezen in alle partities die door de query zijn gescand.
UPDATE De som van verwerkte bytes voor alle kolommen waarnaar wordt verwezen in alle partities voor de tabellen die door de query zijn gescand
+ de som van bytes voor alle kolommen in de geüpdatete of gescande partities voor de tabel die wordt geüpdatet (op het moment dat de instructie UPDATE wordt gestart).
DELETE De som van verwerkte bytes voor alle kolommen waarnaar wordt verwezen in alle partities voor de tabellen die door de query zijn gescand
+ de som van bytes voor alle kolommen in de gewijzigde of gescande partities voor de tabel die wordt gewijzigd (op het moment dat de instructie DELETE wordt gestart).
MERGE Als er alleen INSERT-bepalingen in de MERGE-instructie voorkomen, worden kosten in rekening gebracht voor de som van verwerkte bytes voor alle kolommen waarnaar wordt verwezen in alle partities die door de query zijn gescand.
Als er een UPDATE- of DELETE-bepaling in de MERGE-instructie voorkomt, worden kosten in rekening gebracht voor de som van de verwerkte bytes voor alle kolommen waarnaar wordt verwezen in alle partities voor de brontabellen die door de query zijn gescand
+ de som van bytes voor alle kolommen in de geüpdatete, verwijderde of gescande partities voor de doeltabel (op het moment dat de instructie MERGE wordt gestart).

Prijzen voor Data Definition Language

Bij BigQuery worden kosten voor DDL-query's in rekening gebracht op basis van het aantal bytes dat door de query wordt verwerkt. Voor DDL-instructies wordt het aantal verwerkte bytes als volgt berekend:

DDL-instructie Verwerkte bytes
CREATE TABLE Geen.
CREATE TABLE ... AS SELECT ... De som van verwerkte bytes voor alle kolommen waarnaar wordt verwezen in de tabellen die door de query zijn gescand.
CREATE VIEW Geen.
DROP TABLE Geen.
DROP VIEW Geen.

Prijzen voor clustertabellen

Als u in BigQuery clustertabellen maakt en gebruikt, wordt de prijs berekend op basis van de hoeveelheid gegevens die in de tabellen is opgeslagen en de query's die u uitvoert op deze gegevens. Met clustertabellen kunt u de kosten voor query's verminderen door gegevens op te schonen, zodat ze niet door de query's worden verwerkt. Dit heet 'blokopschoning'.

Blokopschoning

BigQuery sorteert de gegevens in een clustertabel op basis van de waarden in de clusterkolommen en organiseert deze in blokken.

Als u een query uitvoert die een filter voor een clusterkolom bevat, bepaalt BigQuery aan de hand van de clusterinformatie efficiënt of een blok gegevens bevat die relevant zijn voor de query. Zo scant BigQuery alleen de relevante blokken. Dit proces heet 'blokopschoning'.

De kosten voor de query's zijn gebaseerd op de hoeveelheid verwerkte bytes. Als u een query met een filter voor clusterkolommen uitvoert in een clustertabel, gebruikt BigQuery de filterexpressie en metadata van het blok om de door de query gescande blokken op te schonen.

Als een blok wordt opgeschoond, wordt het niet gescand. Alleen de gescande blokken worden meegenomen in de berekening van de door de query verwerkte bytes. De hoeveelheid door een query verwerkte bytes in een clustertabel is gelijk aan de som van de gelezen bytes in elke kolom van de gescande blokken waarnaar de query verwijst.

Als er meerdere keren naar een clustertabel wordt verwezen in een query die meerdere filters bevat, brengt BigQuery kosten in rekening om de kolommen in de juiste blokken van elk filter te scannen.

Prijzen voor het uitvoeren van scripts

Het BigQuery-team raadt u aan tijdens de bètafase van BigQuery-scripts capaciteit voor projecten te reserveren op basis van een flatrate om onbedoelde querykosten te vermijden. Van tevoren is immers niet bekend hoeveel bytes een script zal scannen. U kunt eventueel ook de BigQuery-sandbox gebruiken om een beperkt aantal scripts uit te voeren zonder kosten. Het BigQuery-team werkt nog aan mogelijkheden om het totale aantal bytes dat door scripts wordt gescand en de afzonderlijke instructies explicieter te kunnen bepalen. Dit is een bètaversie. Zie de release-opmerkingen over BigQuery voor updates met betrekking tot de prijsinformatie.

Als een script eindigt met een fout, worden er kosten in rekening gebracht voor alle instructies tot aan de fout. Voor de instructie waarin de fout optreedt, worden geen kosten in rekening gebracht.

Voor openbare instructietypen zoals SELECT, INSERT, en UPDATE gelden de uitvoeringskosten die vermeld staan in de betreffende documentatie. Voor scriptspecifieke instructietypen gelden de volgende prijzen:

  • DECLARE: De som van alle gescande bytes in tabellen waarnaar wordt verwezen in de expressie DEFAULT. Voor DECLARE-instructies zonder tabelreferenties worden geen kosten in rekening gebracht.
  • SET: De som van alle gescande bytes in tabellen waarnaar wordt verwezen in de expressie. Voor SET-instructies zonder tabelreferenties worden geen kosten in rekening gebracht.
  • IF: De som van alle gescande bytes in tabellen waarnaar wordt verwezen in de voorwaarde-expressie. Voor IF-expressies zonder tabelreferenties worden geen kosten in rekening gebracht. Ook voor niet-uitgevoerde instructies in een IF-blok worden geen kosten in rekening gebracht.
  • WHILE: De som van alle gescande bytes in tabellen waarnaar wordt verwezen in de voorwaarde-expressie. Voor WHILE-instructies zonder tabelreferenties in de voorwaarde-expressie worden geen kosten in rekening gebracht. Ook voor niet-uitgevoerde instructies in een WHILE-blok worden geen kosten in rekening gebracht.
  • CONTINUE/ITERATE: Hieraan zijn geen kosten verbonden.
  • BREAK/LEAVE: Hieraan zijn geen kosten verbonden.
  • BEGIN/END: Hieraan zijn geen kosten verbonden.

Voor tijdelijke tabellen worden geen opslagkosten in rekening gebracht terwijl het script wordt uitgevoerd. Voor instructies waarmee u tabellen maakt, wijzigt of er query's op uitvoert, gelden echter de reguliere prijzen.

Voorbeelden van BigQuery-prijzen

Querykosten schatten

Ga naar Querykosten schatten voor voorbeelden van querykosten.

Schatting van opslagkosten

Ga naar Opslagkosten schatten voor voorbeelden van opslagkosten.

Voorbeelden van DML-prijzen voor niet-gepartitioneerde tabellen

In de volgende voorbeelden ziet u hoe BigQuery het aantal gelezen bytes berekent voor DML-instructies waarmee niet-gepartitioneerde tabellen worden gewijzigd.

Voorbeeld 1: UPDATE-instructie voor niet-gepartitioneerde tabellen

table1 heeft twee kolommen: col1 van het type INTEGER en col2 van het type STRING.

UPDATE table1 SET col1 = 1 WHERE col2 = 2;

Verwerkte bytes in dit voorbeeld =

  • som van het aantal bytes in col1 +
  • som van het aantal bytes in col2

Voorbeeld 2: UPDATE-instructie voor niet-gepartitioneerde tabellen

table1 heeft twee kolommen: col1 van het type INTEGER en col2 van het type STRING. table2 heeft één kolom: field1 van het type INTEGER.

UPDATE table1 SET col1 = 1 WHERE col1 in (SELECT field1 from table2)

Verwerkte bytes in dit voorbeeld =

  • som van het aantal bytes in table1.col1 vóór UPDATE +
  • som van het aantal bytes in table1.col2 vóór UPDATE +
  • som van het aantal bytes in table2.field1

Voorbeelden van DML-prijzen voor gepartitioneerde tabellen

In de volgende voorbeelden ziet u hoe BigQuery het aantal gelezen bytes berekent voor DML-instructies, waarmee de tabellen die zijn gepartitioneerd op basis van verwerkingstijd worden gewijzigd. Als u de JSON-schemaweergaven wilt bekijken voor de tabellen die in de voorbeelden worden gebruikt, raadpleegt u Tabellen die in voorbeelden worden gebruikt op de pagina 'Gegevens van gepartitioneerde tabellen updaten met DML-instructies'.

Voorbeeld 1: INSERT-instructie voor tabellen die zijn gepartitioneerd op basis van verwerkingstijd

mytable2 heeft twee kolommen: id van het type INTEGER en ts van het type TIMESTAMP. mytable heeft twee kolommen: field1 van het type INTEGER en field2 van het type STRING.

INSERT INTO mytable (_PARTITIONTIME, field1) AS SELECT TIMESTAMP(DATE(ts)), id from mytable2

Verwerkte bytes in dit voorbeeld =

  • som van het aantal bytes in mytable2.ts +
  • som van het aantal bytes in mytable2.id

De grootte van de tabel waarin de rijen worden ingevoegd (mytable) heeft geen invloed op de kosten van de query.

Voorbeeld 2: INSERT-instructie voor gepartitioneerde tabellen

mytable2 heeft twee kolommen: id van het type INTEGER en ts van het type TIMESTAMP. mycolumntable heeft vier kolommen: field1 van het type INTEGER, field2 van het type STRING, field3 van het type BOOLEAN en ts van het type TIMESTAMP.

INSERT INTO mycolumntable (ts, field1) AS SELECT ts, id from mytable2

Verwerkte bytes in dit voorbeeld =

  • som van het aantal bytes in mytable2.ts +
  • som van het aantal bytes in mytable2.id

De grootte van de tabel waarin de rijen worden ingevoegd (mycolumntable) heeft geen invloed op de kosten van de query.

Voorbeeld 3: UPDATE-instructie voor tabellen die zijn gepartitioneerd op basis van verwerkingstijd

DML-instructie 1: één partitie updaten

mytable2 heeft twee kolommen: id van het type INTEGER en ts van het type TIMESTAMP. mytable heeft twee kolommen: field1 van het type INTEGER en field2 van het type STRING.

UPDATE project.mydataset.mytable T SET T.field1 = T.field1 + 100 WHERE T._PARTITIONTIME = TIMESTAMP(“2017-05-01”) AND EXISTS (SELECT S.id from project.mydataset.mytable2 S WHERE S.id = T.field1)

Verwerkte bytes in dit voorbeeld =

  • som van het aantal bytes in mytable2.id +
  • som van het aantal bytes in mytable.field1 in de partitie '2017-05-01' +
  • som van het aantal bytes in mytable.field2 in de partitie '2017-05-01'

DML-instructie 2: een partitie updaten op basis van een andere partitie in de tabel

UPDATE project.mydataset.mytable T SET T._PARTITIONTIME = TIMESTAMP(“2017-06-01”), T.field1 = T.field1 + 100 WHERE T._PARTITIONTIME = TIMESTAMP(“2017-05-01”) AND EXISTS (SELECT 1 from project.mydataset.mytable S WHERE S.field1 = T.field1 AND S._PARTITIONTIME = TIMESTAMP("2017-06-01") )

Verwerkte bytes in dit voorbeeld =

  • som van het aantal bytes in mytable.field1 in de partitie '2017-05-01' +
  • som van het aantal bytes in mytable.field2 in de partitie '2017-05-01' +
  • som van het aantal bytes in mytable.field1 in de partitie '2017-06-01' +
  • som van het aantal bytes in mytable.field2 in de partitie '2017-06-01'

In dit geval bedragen de kosten voor de UPDATE-instructie de som van de grootten van alle velden in de partities die overeenkomen met 2017-05-01 en 2017-06-01.

Voorbeeld 4: UPDATE-instructie voor gepartitioneerde tabellen

DML-instructie 1: één partitie updaten

mytable2 heeft twee kolommen: id van het type INTEGER en ts van het type TIMESTAMP. mycolumntable heeft vier kolommen: field1 van het type INTEGER, field2 van het type STRING, field3 van het type BOOLEAN en ts van het type TIMESTAMP.

UPDATE project.mydataset.mycolumntable T SET T.field1 = T.field1 + 100 WHERE DATE(T.ts) = “2017-05-01” AND EXISTS (SELECT S.id from project.mydataset.mytable2 S WHERE S.id = T.field1)

Verwerkte bytes in dit voorbeeld =

  • som van het aantal bytes in mytable2.id +
  • som van het aantal bytes in mycolumntable.field1 in de partitie '2017-05-01' +
  • som van het aantal bytes in mycolumntable.field2 in de partitie '2017-05-01' +
  • som van het aantal bytes in mycolumntable.field3 in de partitie '2017-05-01' +
  • som van het aantal bytes in mycolumntable.ts in de partitie '2017-05-01'

DML-instructie 2: een partitie updaten op basis van een andere partitie in de tabel

UPDATE project.mydataset.mycolumntable T SET T.ts = TIMESTAMP(“2017-06-01”), T.field1 = T.field1 + 100 WHERE DATE(T.ts) = “2017-05-01” AND EXISTS (SELECT 1 from project.mydataset.mycolumntable S WHERE S.field1 = T.field1 AND DATE(S.ts) = "2017-06-01")

Verwerkte bytes in dit voorbeeld =

  • som van het aantal bytes in mycolumntable.field1 in de partitie '2017-05-01' +
  • som van het aantal bytes in mycolumntable.field2 in de partitie '2017-05-01' +
  • som van het aantal bytes in mycolumntable.field3 in de partitie '2017-05-01' +
  • som van het aantal bytes in mycolumntable.ts in de partitie '2017-05-01' +
  • som van het aantal bytes in mycolumntable.field1 in de partitie '2017-06-01' +
  • som van het aantal bytes in mycolumntable.field2 in de partitie '2017-06-01' +
  • som van het aantal bytes in mycolumntable.field3 in de partitie '2017-06-01' +
  • som van het aantal bytes in mycolumntable.ts in de partitie '2017-06-01'

In dit geval bedragen de kosten voor de UPDATE-instructie de som van de grootten van alle velden in de partities die overeenkomen met 2017-05-01 en 2017-06-01.

Voorbeeld 5: DELETE-instructie voor tabellen die zijn gepartitioneerd op basis van verwerkingstijd

mytable2 heeft twee kolommen: id van het type INTEGER en ts van het type TIMESTAMP. mytable heeft twee kolommen: field1 van het type INTEGER en field2 van het type STRING.

DELETE project.mydataset.mytable T WHERE T._PARTITIONTIME = TIMESTAMP(“2017-05-01”) AND EXISTS (SELECT S.id from project.mydataset.mytable2 S WHERE S.id = T.field1)

Verwerkte bytes in dit voorbeeld =

  • som van het aantal bytes in mytable2.id +
  • som van het aantal bytes in mytable.field1 in de partitie '2017-05-01' +
  • som van het aantal bytes in mytable.field2 in de partitie '2017-05-01'

Voorbeeld 6: DELETE-instructie voor gepartitioneerde tabellen

mytable2 heeft twee kolommen: id van het type INTEGER en ts van het type TIMESTAMP. mycolumntable heeft vier kolommen: field1 van het type INTEGER, field2 van het type STRING, field3 van het type BOOLEAN en ts van het type TIMESTAMP.

DELETE project.mydataset.mycolumntable T WHERE DATE(T.ts) =“2017-05-01” AND EXISTS (SELECT S.id from project.mydataset.mytable2 S WHERE S.id = T.field1)

Verwerkte bytes in dit voorbeeld =

  • som van het aantal bytes in mytable2.id +
  • som van het aantal bytes in mycolumntable.field1 in de partitie '2017-05-01' +
  • som van het aantal bytes in mycolumntable.field2 in de partitie '2017-05-01' +
  • som van het aantal bytes in mycolumntable.field3 in de partitie '2017-05-01' +
  • som van het aantal bytes in mycolumntable.ts in de partitie '2017-05-01'

Voorbeeld van prijzen voor clustertabellen

U heeft een clustertabel die ClusteredSalesData heet. De tabel is gepartitioneerd door de kolom timestamp en geclusterd door de kolom customer_id. De gegevens zijn in de volgende blokken georganiseerd:

Partitie-ID Blok-ID Minimale waarde voor customer_id in het blok Maximale waarde voor customer_id in het blok
20160501 B1 10000 19999
20160501 B2 20000 24999
20160502 B3 15000 17999
20160501 B4 22000 27999

U voert de volgende query's uit op de tabel. De query bevat een filter in de kolom customer_id.

SELECT
  SUM(totalSale)
FROM
  `mydataset.ClusteredSalesData`
WHERE
  customer_id BETWEEN 20000
  AND 23000
  AND DATE(timestamp) = "2016-05-01"

Deze query doet het volgende:

  • Scant de kolommen timestamp, customer_id en totalSale in de blokken B2 en B4.
  • Schoont het blok B3 op door het filterpredicaat DATE(timestamp) = "2016-05-01" op de partitiekolom timestamp.
  • Schoont het blok B1 op door het filterpredicaat customer_id BETWEEN 20000 AND 23000 op de clusterkolom customer_id.

Prijsvoorbeeld voor het uitvoeren van scripts

In het volgende voorbeeldscript wordt per instructie uitgelegd welke eventuele kosten ervoor in rekening worden gebracht. De kosteninformatie staat steeds boven de instructie.

-- No cost, since no tables are referenced.
DECLARE x DATE DEFAULT CURRENT_DATE();
-- Incurs the cost of scanning string_col from dataset.table.
DECLARE y STRING DEFAULT (SELECT MAX(string_col) FROM dataset.table);
-- Incurs the cost of copying the data from dataset.big_table.  Once the
-- table is created, you are not charged for storage while the rest of the
-- script runs.
CREATE TEMP TABLE t AS SELECT * FROM dataset.big_table;
-- Incurs the cost of scanning column1 from temporary table t.
SELECT column1 FROM t;
-- No cost, since y = 'foo' doesn't reference a table.
IF y = 'foo' THEN
  -- Incurs the cost of scanning all columns from dataset.other_table, if
  -- y was equal to 'foo', or otherwise no cost since it is not executed.
  SELECT * FROM dataset.other_table;
ELSE
  -- Incurs the cost of scanning all columns from dataset.different_table, if
  -- y was not equal to 'foo', or otherwise no cost since it is not executed.
  UPDATE dataset.different_table
  SET col = 10
  WHERE true;
END IF;
-- Incurs the cost of scanning date_col from dataset.table for each
-- iteration of the loop.
WHILE x < (SELECT MIN(date_col) FROM dataset.table) DO
  -- No cost, since the expression does not reference any tables.
  SET x = DATE_ADD(x, INTERVAL 1 DAY);
  -- No cost, since the expression does not reference any tables.
  IF true THEN
    -- LEAVE has no associated cost.
    LEAVE;
  END IF;
  -- Never executed, since the IF branch is always taken, so does not incur
  -- a cost.
  SELECT * FROM dataset.big_table;
END WHILE;
Was deze pagina nuttig? Laat ons weten hoe goed we u hebben geholpen:

Feedback verzenden over...

Hulp nodig? Ga naar onze ondersteuningspagina.