Excel ma oficjalny limit 1 048 576 wierszy. W praktyce większość plików zaczyna spowalniać przy 100–200 tysiącach wierszy, gdy w grę wchodzą formuły VLOOKUP przeszukujące duże zakresy, tabele przestawne na żywych danych albo kilka połączonych zakładek. Plik rośnie powyżej 30 MB, otwieranie zajmuje minutę, a kolega z innego działu nadal pracuje na wersji sprzed tygodnia.
BigQuery rozwiązuje te problemy strukturalnie. Jeden zapas danych dostępny dla wszystkich, zapytania na miliardach wierszy w kilka sekund, bezpłatny tier wystarczający dla większości firm na start. Jedyna bariera wejścia: jak tam przenieść to, co dotychczas żyło w Excelu lub Arkuszach?
Poniżej cztery metody – od kliknięcia w konsoli po automatyczny nocny pipeline. Każda pasuje do innego scenariusza.
Zanim zaczniesz – co przygotować
BigQuery działa w ramach Google Cloud Platform – to osobna warstwa od Google Workspace (Dokumenty, Sheets, Gmail). Potrzebujesz:
- Konta Google Cloud – załóż na console.cloud.google.com. Możesz zalogować się kontem Gmail lub kontem Google Workspace.
- Projektu Google Cloud – kontener rozliczeniowy na zasoby. Nowe konto dostaje darmowy kredyt 300 USD na 90 dni. Utwórz projekt podczas pierwszego logowania.
- Zestawu danych w BigQuery – odpowiednik schematu bazy SQL. Grupuje tabele. Utwórz go raz przed pierwszym importem.
Jak stworzyć zestaw danych: po wejściu do BigQuery w konsoli kliknij trzy kropki przy nazwie projektu → Utwórz zbiór danych → podaj nazwę (np. sprzedaz) i lokalizację danych. Dla firm europejskich wybierz EU (wiele regionów w Europie) – dane będą fizycznie w Europie, co ułatwia spełnienie wymogów RODO.
Metoda 1: Upload CSV lub Excel z konsoli Google Cloud
Kiedy używać: masz plik na dysku, chcesz wgrać go jednorazowo, bez kodu. Najprostsza metoda – zajmuje 3 minuty.
Obsługiwane formaty: CSV, JSON (Lines), Avro, Parquet, ORC, Excel (.xlsx). CSV jest najszybszy i najbardziej niezawodny, szczególnie przy polskich znakach.
Krok po kroku
- Wejdź na console.cloud.google.com → BigQuery.
- W panelu po lewej kliknij swój zestaw danych (np.
sprzedaz) → przycisk Utwórz tabelę. - W polu Źródło wybierz Upload, a następnie wybierz plik z dysku.
- Nazwa tabeli docelowej – np.
zamowienia_2025. - W sekcji Schemat zaznacz Automatyczne wykrywanie – BigQuery sam rozpozna typy kolumn. Sprawdzi się w 90% przypadków.
- Kliknij Utwórz tabelę. Dla pliku 20 MB – czekasz kilka sekund.
Ograniczenie tej metody: bezpośredni upload obsługuje pliki do 100 MB. Większe pliki wymagają pośrednictwa Cloud Storage – opisanego w metodzie 4.
Metoda 2: Import z Arkuszy Google (jednorazowy)
Kiedy używać: dane żyją w Arkuszu Google, nie w lokalnym pliku. Chcesz przenieść je do BigQuery jednorazowo – bez pobierania i wgrywania CSV.
Krok po kroku
- Upewnij się, że arkusz jest udostępniony do wyświetlania dla Twojego konta Google Cloud (lub jest publiczny dla osób z linkiem – wystarczy poziom widza).
- W BigQuery → Utwórz tabelę → Źródło: Dysk → Google Drive.
- Wklej URL arkusza (skopiuj z paska przeglądarki – pełny URL z
/edit). - Format pliku: Google Sheets.
- Opcjonalnie: w polu Zakres arkusza podaj zakres komórek, np.
Sprzedaż!A1:M5000, żeby nie importować pustych wierszy i bocznych tabel. - Schemat: Automatyczne wykrywanie → Utwórz tabelę.
Tabela powstaje jednorazowo ze stanem arkusza w chwili importu. Jeśli arkusz zostanie zmieniony, tabela w BigQuery tego nie zobaczy – trzeba powtórzyć import ręcznie lub zautomatyzować go przez Apps Script (metoda 3).
Metoda 3: Automatyczny pipeline przez Apps Script
Kiedy używać: arkusz aktualizuje się regularnie (handlowcy wpisują wyniki codziennie, system eksportuje CSV co noc) i chcesz, żeby BigQuery zawsze miał świeże dane – bez żadnego ręcznego działania.
Apps Script ma wbudowaną usługę BigQuery. Poniżej skrypt, który raz na dobę eksportuje wszystkie wiersze z arkusza do tabeli BigQuery – zastępując dane z poprzedniego dnia.
function eksportujDooBigQuery() {
const sheet = SpreadsheetApp
.getActiveSpreadsheet()
.getSheetByName('Sprzedaż');
const data = sheet.getDataRange().getValues();
const headers = data[0];
const rows = data.slice(1).filter(r => r[0] !== '');
const projectId = 'TWOJ-PROJEKT-ID';
const datasetId = 'sprzedaz';
const tableId = 'zamowienia';
const body = {
rows: rows.map(row => ({
insertId: Utilities.getUuid(),
json: Object.fromEntries(
headers.map((h, i) => [String(h), row[i] === '' ? null : row[i]])
)
}))
};
const resp = BigQuery.Tabledata.insertAll(body, projectId, datasetId, tableId);
if (resp.insertErrors && resp.insertErrors.length > 0) {
console.error('Błędy importu:', JSON.stringify(resp.insertErrors));
} else {
console.log('Wgrano wierszy: ' + rows.length);
}
}
Żeby skrypt działał, musisz najpierw dodać usługę BigQuery w edytorze Apps Script: Usługi (ikona +) → BigQuery API → Dodaj.
Automatyczne uruchamianie: Wyzwalacze (ikona zegara) → Dodaj wyzwalacz → Oparty na czasie → Codziennie → wybierz przedział godzinowy (np. 02:00–03:00).
insertAll dołącza wiersze do tabeli – nie zastępuje. Jeśli chcesz mieć zawsze aktualny snapshot (bez duplikatów), przed każdym importem usuń zawartość tabeli przez BigQuery.Tables.insert z opcją WRITE_TRUNCATE lub użyj Load Job zamiast Streaming Insert. Dla prostego codziennego snapshotu najłatwiej jest tworzyć tabelę z datą w nazwie: zamowienia_20260620.
Metoda 4: Duże pliki przez Cloud Storage
Kiedy używać: plik przekracza 100 MB, masz wiele plików do załadowania naraz (np. 12 miesięcznych eksportów z systemu ERP), albo pliki lądują automatycznie na zasobniku z zewnętrznego systemu.
Krok po kroku
- Utwórz zasobnik Cloud Storage – w konsoli GCP wyszukaj Cloud Storage → Utwórz zasobnik. Wybierz ten sam region co Twój zestaw danych w BigQuery (np. EU).
- Prześlij plik(i) – kliknij zasobnik → Prześlij pliki. Możesz wgrać wiele plików jednocześnie.
- W BigQuery → Utwórz tabelę → Źródło: Google Cloud Storage.
- Ścieżka do pliku:
gs://nazwa-zasobnika/plik.csv. Dla wielu plików o tej samej strukturze użyj wieloznacznika:gs://nazwa-zasobnika/eksporty/*.csv– BigQuery wczyta je wszystkie jako jedną tabelę. - Schemat: Automatyczne wykrywanie → Utwórz tabelę.
Ta metoda obsługuje bez problemu pliki o rozmiarze wielu gigabajtów. Czas importu 1 GB CSV to zazwyczaj 30–90 sekund.
Jak sprawdzić czy dane weszły poprawnie
Po imporcie otwórz tabelę w BigQuery – zakładka Schemat pokaże wykryte kolumny i ich typy. Zakładka Podgląd wyświetli pierwsze 50 wierszy.
Kilka zapytań, które warto uruchomić od razu:
-- Ile wierszy weszło?
SELECT COUNT(*) AS liczba_wierszy
FROM `projekt.sprzedaz.zamowienia`;
-- Czy nie ma pustych wartości w kluczowej kolumnie?
SELECT
COUNT(*) AS razem,
COUNTIF(id_zamowienia IS NULL) AS brakujace_id
FROM `projekt.sprzedaz.zamowienia`;
-- Podgląd pierwszych 10 wierszy
SELECT *
FROM `projekt.sprzedaz.zamowienia`
LIMIT 10;
Jeśli liczba wierszy w BigQuery zgadza się z liczbą wierszy w źródłowym pliku (minus wiersz nagłówka) – import przebiegł poprawnie.
Pierwsze zapytanie zamiast VLOOKUP
Typowy case: masz tabelę zamówień i tabelę produktów. W Excelu łączyłeś je przez VLOOKUP. W BigQuery to jedno zapytanie JOIN, które działa tak samo na 100 wierszach jak na 100 milionach:
SELECT
z.data_zamowienia,
p.nazwa_produktu,
SUM(z.wartosc_netto) AS przychod_netto,
COUNT(*) AS liczba_zamowien
FROM `projekt.sprzedaz.zamowienia` z
JOIN `projekt.sprzedaz.produkty` p ON z.produkt_id = p.id
WHERE DATE(z.data_zamowienia) >= '2026-01-01'
GROUP BY z.data_zamowienia, p.nazwa_produktu
ORDER BY przychod_netto DESC
LIMIT 20;
Wynik tego zapytania możesz od razu podłączyć do Data Studio jako źródło danych i zbudować na nim dashboard – bez żadnego kopiowania do Excela.
Kiedy którą metodę wybrać
| Metoda | Rozmiar pliku | Aktualizacja | Trudność |
|---|---|---|---|
| Upload z konsoli | do 100 MB | Ręcznie | ⭐ Najłatwiejsza |
| Import z Sheets | Dowolny | Ręcznie | ⭐⭐ Łatwa |
| Apps Script | Dowolny | Automatyczna | ⭐⭐⭐ Średnia |
| Cloud Storage | Nieograniczony | Ręcznie lub auto | ⭐⭐⭐ Średnia |
Dla pierwszego kontaktu z BigQuery zacznij od metody 1 – upload CSV z konsoli. Cel: sprawdzić czy dane wchodzą poprawnie i uruchomić pierwsze zapytanie. Automatyzacja przez Apps Script ma sens, gdy już wiesz że dane są OK i chcesz żeby pipeline działał bez Twojego udziału.