نحوه استفاده از R برای جستجوی داده ها در Google BigQuery با بسته های bigrquery و dplyr R را ببینید.
آیا میخواهید دادههای موجود در Google BigQuery را به عنوان بخشی از یک گردش کار R تجزیه و تحلیل کنید؟ با تشکر از بسته R bigrquery، این یک تجربه کاملاً یکپارچه است — وقتی بدانید چند ترفند کوچک برای اجرای توابع dplyr روی چنین دادههایی لازم است.
اول، ابتدا به یک حساب Google Cloud نیاز دارید. توجه داشته باشید که حتی اگر دادهها در حساب شخص دیگری باشد و قصد ذخیره کردن دادههای خود را نداشته باشید، به حساب Google Cloud خود نیاز دارید.
نحوه تنظیم یک حساب Google Cloud
بسیاری از افراد از قبل دارای حسابهای عمومی Google برای استفاده با سرویسهایی مانند Google Drive یا Gmail هستند. اگر هنوز یکی را ندارید، مطمئن شوید که یکی ایجاد کنید.
سپس، به Google Cloud Console در https://console.cloud.google.com، با حساب Google خود وارد شوید و یک پروژه ابری جدید ایجاد کنید. توجه جانبازان R: در حالی که پروژه ها هنگام کار در RStudio ایده خوبی هستند، در Google Cloud اجباری هستند.
برای ایجاد پروژه جدید، روی گزینه New Project کلیک کنید.
باید گزینه ایجاد پروژه جدید را در سمت چپ نوار پیمایش بالای Google Cloud مشاهده کنید. روی منوی کشویی در سمت راست «Google Cloud Platform» کلیک کنید (اگر قبلاً هیچ پروژه ای ندارید، ممکن است بگوید «انتخاب پروژه»). به پروژه خود یک نام بدهید. اگر صورتحساب را قبلاً در حساب Google خود فعال کردهاید، باید یک حساب صورتحساب را انتخاب کنید. اگر این کار را نکنید، احتمالاً به عنوان یک گزینه ظاهر نمی شود. سپس روی “ایجاد” کلیک کنید.
اگر شناسه پروژه پیش فرض اختصاص داده شده به پروژه خود را دوست ندارید، می توانید قبل از کلیک بر روی دکمه ایجاد، آن را ویرایش کنید.
اگر شناسه پروژه که به طور خودکار برای پروژه شما ایجاد میشود را دوست ندارید، میتوانید آن را ویرایش کنید، با این فرض که چیزی را که قبلاً گرفته شده انتخاب نکردهاید.
پیدا کردن BigQuery را آسانتر کنید
پس از اتمام راهاندازی پروژه جدید، داشبورد کلی Google Cloud را میبینید که ممکن است کمی خستهکننده به نظر برسد. همه این موارد چیست و BigQuery کجاست؟ احتمالاً نیازی نیست نگران بیشتر سرویسهای دیگر باشید، اما میخواهید به راحتی بتوانید BigQuery را در میان همه آنها پیدا کنید.
اگر میخواهید فقط از یک سرویس استفاده کنید، صفحه اصلی Google Cloud میتواند کمی سخت باشد. (از آن زمان این پروژه را حذف کردم.)
یک راه این است که BigQuery را به بالای منوی پیمایش سمت چپ خود “پین کنید”. (اگر ناوبری سمت چپ را نمی بینید، روی “همبرگر” سه خطی در بالا سمت چپ کلیک کنید تا باز شود.) تمام مسیر را به پایین اسکرول کنید، BigQuery را پیدا کنید، ماوس خود را روی آن ببرید. آن را تا زمانی که نماد پین را مشاهده کنید، روی پین کلیک کنید.
برای یافتن سرویس BigQuery به پایین پیمایش سمت چپ در صفحه اصلی Google Cloud بروید. میتوانید با زدن ماوس روی آن «پین» کنید تا نماد پین را ببینید و سپس روی آن کلیک کنید.
اکنون BigQuery همیشه در بالای منوی ناوبری سمت چپ Google Cloud Console نشان داده میشود. به بالا بروید و BigQuery را خواهید دید. روی آن کلیک کنید و به کنسول BigQuery با نام پروژه خود و بدون داده در داخل خواهید رسید.
اگر برگه ویرایشگر بلافاصله قابل مشاهده نیست، روی دکمه “نوشتن پرسش جدید” در بالا سمت راست کلیک کنید.
بازی با داده های عمومی را شروع کنید
حالا چی؟ مردم اغلب یادگیری BigQuery را با بازی با مجموعه داده های عمومی در دسترس شروع می کنند. میتوانید پروژههای دادههای عمومی سایر کاربران را به پروژه خود پین کنید، از جمله مجموعهای از مجموعه دادههای جمعآوریشده توسط Google. اگر به این نشانی اینترنتی بروید در همان برگه مرورگر BigQuery که در آن کار می کردید، پروژه داده های عمومی Google باید به طور خودکار خود را به پروژه شما پین کنید.
با تشکر از JohannesNE در GitHub برای این نکته: میتوانید پین کنید هر مجموعه داده ای که می توانید با استفاده از ساختار URL نشان داده شده در زیر به آن دسترسی داشته باشید.
https://console.cloud.google.com/bigquery?p={project-id}&page=project
اگر این کار نمی کند، بررسی کنید تا مطمئن شوید در حساب Google درستی هستید. اگر در یک مرورگر به بیش از یک حساب Google وارد شده باشید، ممکن است به حساب دیگری از آنچه انتظار داشتید فرستاده شده باشید.
پس از پین کردن یک پروژه، روی مثلث سمت چپ نام پروژه پین شده (در این مورد bigquery-public-data) کلیک کنید و همه مجموعه دادههای موجود در آن را مشاهده خواهید کرد. پروژه مجموعه داده BigQuery مانند یک پایگاه داده معمولی است: دارای یک یا چند جدول داده است. برای دیدن جداول موجود در آن، روی مثلث کنار مجموعه داده کلیک کنید.
کلیک کردن روی یک جدول در رابط وب BigQuery به شما امکان می دهد طرح آن را به همراه یک برگه برای پیش نمایش داده ها مشاهده کنید.
روی نام جدول کلیک کنید تا شمای آن را ببینید. همچنین یک برگه “پیش نمایش” وجود دارد که به شما امکان می دهد برخی از داده های واقعی را مشاهده کنید.
راههای دیگری برای مشاهده ساختار دادههای شما وجود دارد که کمتر کلیک کنید. اما اول ….
قیمت گذاری BigQuery چگونه کار می کند
BigQuery هم برای ذخیره داده و هم برای پرسشهای داده هزینه میگیرد. هنگام استفاده از مجموعه داده ایجاد شده توسط شخص دیگری، آنهاهزینه ذخیره سازی را می پردازند. اگر دادههای خود را در BigQuery ایجاد و ذخیره میکنید، شما پرداخت میکنید — و نرخ یکسان است، چه تنها شما از آن استفاده میکنید، چه آن را با چند نفر دیگر به اشتراک بگذارید یا آن را عمومی کنید. . (هر ماه ۱۰ گیگابایت فضای ذخیره سازی رایگان دریافت می کنید.)
توجه داشته باشید که اگر تجزیه و تحلیل را روی دادههای شخص دیگری اجرا کنید و نتایج را در BigQuery ذخیره کنید، جدول جدید بخشی از تخصیص فضای ذخیرهسازی شما میشود. .
مراقب هزینه های درخواست خود باشید!
قیمت یک پرس و جو بر اساس مقدار داده ای است که پرس و جو پردازش می کند و نه اینکه چه مقدار داده برگردانده می شود i>. این مهم است. اگر درخواست شما تنها ۱۰ نتیجه برتر را پس از تجزیه و تحلیل مجموعه داده های ۴ گیگابایتی برمی گرداند، پرسمان همچنان از ۴ گیگابایت سهمیه تجزیه و تحلیل داده شما استفاده می کند، نه صرفاً از مقدار ناچیز مربوط به ۱۰ ردیف نتایج شما.
هر ماه ۱ ترابایت درخواست داده رایگان دریافت می کنید. هر TB اضافی داده پردازش شده برای تجزیه و تحلیل ۵ دلار هزینه دارد.
اگر درخواستهای SQL را مستقیماً روی دادهها اجرا میکنید، Google توصیه میکند هرگز دستور SELECT *
را اجرا نکنید، که از تمام ستونهای موجود میگذرد. در عوض، انتخاب
فقط ستونهای خاصی را که نیاز دارید برای کاهش دادههایی که باید پردازش شوند، انتخاب کنید. این نه تنها هزینه های شما را پایین نگه می دارد. همچنین باعث می شود پرس و جوهای شما سریعتر اجرا شوند. من همین کار را با جستارهای R dplyr خود انجام می دهم و مطمئن می شوم که فقط ستون هایی را که نیاز دارم انتخاب می کنم.
اگر میپرسید چگونه میتوانید بدانید که درخواست شما قبل از اجرا از چه مقدار داده استفاده میکند، یک پاسخ آسان وجود دارد. در ویرایشگر ابری BigQuery، میتوانید درخواستی را بدون اجرای آن تایپ کنید و سپس ببینید که چه مقدار داده پردازش میکند، همانطور که در تصویر زیر نشان داده شده است.
با استفاده از ویرایشگر BigQuery SQL در رابط وب، می توانید جدول خود را در مجموعه داده و پروژه آن پیدا کنید. تایپ کردن یک پرس و جو بدون اجرای آن نشان می دهد که چه مقدار داده را پردازش می کند. به یاد داشته باشید که از «projectname.datasetname.tablename» در درخواست خود
استفاده کنید
حتی اگر SQL را نمیدانید، میتوانید یک انتخاب ستون SQL ساده انجام دهید تا ایدهای از هزینه در R بدست آورید، زیرا هرگونه فیلتر یا تجمیع اضافی میزان دادههای تحلیلشده را کاهش نمیدهد.
بنابراین، اگر پرس و جو شما روی سه ستون به نامهای columnA، columnB، و columnC در ID جدول اجرا میشود، و table-id در مجموعه داده-id است که بخشی از project-id است، میتوانید به سادگی موارد زیر را در پرس و جو تایپ کنید. ویرایشگر:
SELECT columnA, columnB, columnC FROM `project-id.dataset-id.table-id`
پرس و جو را اجرا نکنید، فقط آن را تایپ کنید و سپس به خط بالا سمت راست نگاه کنید تا ببینید چه مقدار داده استفاده می شود. هر کار دیگری که کد R شما با آن داده انجام می دهد، برای هزینه پرس و جو مهم نیست.
در تصویر بالا، میتوانید ببینید که من سه ستون را از جدول زمانبندیها انتخاب کردهام، که بخشی از مجموعه دادههای بیسبال است، که بخشی از پروژه bigquery-public-data است.
پرسشهای مربوط به فراداده رایگان هستند، اما باید مطمئن شوید که به درستی ساختار جستجوی خود را برای واجد شرایط بودن آن تنظیم میکنید. بهعنوان مثال، استفاده از SELECT COUNT(*)
برای دریافت تعداد ردیفهای مجموعه داده، شارژ نمیشود.
کارهای دیگری وجود دارد که می توانید برای محدود کردن هزینه ها انجام دهید. برای نکات بیشتر، به “کنترل هزینهها در BigQuery”< مراجعه کنید. /a> صفحه.
آیا برای استفاده از BigQuery باید کارت اعتباری وارد کنم؟
خیر، برای شروع استفاده از BigQuery نیازی به کارت اعتباری ندارید. اما بدون فعال کردن صورتحساب، حساب شما یک «جعبه ایمنی» BigQuery است و همه درخواستها کار نمیکنند. من قویاً پیشنهاد میکنم یک منبع صورتحساب را به حساب خود اضافه کنید، حتی اگر بعید است که از سهمیه تجزیه و تحلیل رایگان BigQuery خود فراتر بروید.
اکنون – بالاخره! – بیایید نحوه استفاده از BigQuery با R.
را بررسی کنیم
به مجموعه داده BigQuery در R
متصل شوید
من از بسته bigrquery در این آموزش استفاده خواهم کرد، اما گزینه های دیگری هستند که ممکن است بخواهید در نظر بگیرید، از جمله بسته obdc یا درایورهای حرفه ای RStudio و یکی از محصولات سازمانی آن a>.
برای جستجوی دادههای BigQuery با R و bigrquery، ابتدا باید یک اتصال به مجموعه داده با استفاده از این نحو راهاندازی کنید:
library(bigrquery)
con <- dbConnect(
bigquery(),
project = project_id_containing_the_data,
dataset = database_name
billing = your_project_id_with_the_billing_source
)
اولین آرگومان تابع bigquery()
از بسته bigrquery است که به dbConnect
می گوید که می خواهید به منبع داده BigQuery متصل شوید. سایر آرگومان ها شناسه پروژه، نام مجموعه داده و شناسه پروژه صورتحساب را مشخص می کنند.
(اشیاء اتصال را می توان تقریباً هر چیزی نامید، اما طبق قرارداد اغلب آنها را con نامگذاری می کنند.)
کد زیر کتابخانههای bigrquery و dplyr را بارگیری میکند و سپس یک اتصال به جدول زمانبندی در مجموعه دادههای بیسبال ایجاد میکند.
bigquery-public-data آرگومان پروژه است زیرا مجموعه داده در آنجا زندگی می کند. my_project_id آرگومان صورتحساب است زیرا سهمیه پروژه من برای درخواستها «صورتحساب» میشود.
library(bigrquery)
library(dplyr)
con <- dbConnect(
bigrquery::bigquery(),
project = "bigquery-public-data",
dataset = "baseball",
billing = "my_project_id"
)
هنگامی که این کد را اجرا می کنم هیچ اتفاق خاصی نمی افتد به جز ایجاد یک متغیر اتصال. اما اولین باری که سعی میکنم از اتصال استفاده کنم، از من خواسته میشود تا حساب Google خود را در پنجره مرورگر تأیید کنم.
به عنوان مثال، برای فهرست کردن همه جداول موجود در مجموعه داده های بیسبال، این کد را اجرا می کنم:
dbListTables(con)
# You will be asked to authenticate in your browser
چگونه از جدول BigQuery در R
پرس و جو کنیم
برای پرس و جو از یک جدول BigQuery خاص در R، از تابع dplyr tbl()
برای ایجاد یک شی جدول که به جدول ارجاع می دهد استفاده کنید، مانند این برای جدول زمانبندی با استفاده از اتصال تازه ایجاد شده من به مجموعه داده بیسبال:
skeds <- tbl(con, "schedules")
اگر از دستور پایه R str()
برای بررسی ساختار skeds استفاده کنید، یک لیست خواهید دید، نه یک قاب داده:
str(skeds) List of 2 $ src:List of 2 ..$ con :Formal class 'BigQueryConnection' [package "bigrquery"] with 7 slots .. .. ..@ project : chr "bigquery-public-data" .. .. ..@ dataset : chr "baseball" .. .. ..@ billing : chr "do-more-with-r-242314" .. .. ..@ use_legacy_sql: logi FALSE .. .. ..@ page_size : int 10000 .. .. ..@ quiet : logi NA .. .. ..@ bigint : chr "integer" ..$ disco: NULL ..- attr(*, "class")= chr [1:4] "src_BigQueryConnection" "src_dbi" "src_sql" "src" $ ops:List of 2 ..$ x : 'ident' chr "schedules" ..$ vars: chr [1:16] "gameId" "gameNumber" "seasonId" "year" ... ..- attr(*, "class")= chr [1:3] "op_base_remote" "op_base" "op" - attr(*, "class")= chr [1:5] "tbl_BigQueryConnection" "tbl_dbi" "tbl_sql" "tbl_lazy" ...
خوشبختانه، توابع dplyr مانند glimpse()
اغلب با این نوع شی (کلاس tbl_BigQueryConnection
) کاملاً یکپارچه کار می کنند.
اجرای glimpse(skeds)
بیشتر آنچه را که انتظار دارید برمیگرداند – به جز اینکه نمیداند چند ردیف در دادهها وجود دارد.
glimpse(skeds)
Rows: ??
Columns: 16
Database: BigQueryConnection
$ gameId <chr> "e14b6493-9e7f-404f-840a-8a680cc364bf", "1f32b347-cbcb-4c31-a145-0e…
$ gameNumber <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
$ seasonId <chr> "565de4be-dc80-4849-a7e1-54bc79156cc8", "565de4be-dc80-4849-a7e1-54…
$ year <int> 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2…
$ type <chr> "REG", "REG", "REG", "REG", "REG", "REG", "REG", "REG", "REG", "REG…
$ dayNight <chr> "D", "D", "D", "D", "D", "D", "D", "D", "D", "D", "D", "D", "D", "D…
$ duration <chr> "3:07", "3:09", "2:45", "3:42", "2:44", "3:21", "2:53", "2:56", "3:…
$ duration_minutes <int> 187, 189, 165, 222, 164, 201, 173, 176, 180, 157, 218, 160, 178, 20…
$ homeTeamId <chr> "03556285-bdbb-4576-a06d-42f71f46ddc5", "03556285-bdbb-4576-a06d-42…
$ homeTeamName <chr> "Marlins", "Marlins", "Braves", "Braves", "Phillies", "Diamondbacks…
$ awayTeamId <chr> "55714da8-fcaf-4574-8443-59bfb511a524", "55714da8-fcaf-4574-8443-59…
$ awayTeamName <chr> "Cubs", "Cubs", "Cubs", "Cubs", "Cubs", "Cubs", "Cubs", "Cubs", "Cu…
$ startTime <dttm> 2016-06-26 17:10:00, 2016-06-25 20:10:00, 2016-06-11 20:10:00, 201…
$ attendance <int> 27318, 29457, 43114, 31625, 28650, 33258, 23450, 32358, 46206, 4470…
$ status <chr> "closed", "closed", "closed", "closed", "closed", "closed", "closed…
$ created <dttm> 2016-10-06 06:25:15, 2016-10-06 06:25:15, 2016-10-06 06:25:15, 201…
این به من میگوید glimpse()
ممکن است کل مجموعه دادهها را تجزیه نکند – و به این معنی است که احتمال زیادی وجود دارد که هزینههای پرس و جو را انجام ندهد، اما در عوض فراداده را جستجو میکند. وقتی رابط وب BigQuery خود را پس از اجرای آن دستور بررسی کردم، در واقع هیچ هزینه درخواستی وجود نداشت.
تجزیه و تحلیل BigQuery + dplyr
شما می توانید دستورات dplyr را روی اشیاء جدول تقریباً به همان روشی که در فریم های داده معمولی انجام می دهید اجرا کنید. اما احتمالاً یک اضافه میخواهید: لولهگذاری از جریان کار معمول dplyr شما به تابع collect()
حاصل میشود.
کد زیر از dplyr استفاده میکند تا ببیند چه سالها و تیمهای خانگی در شی جدول skeds هستند و نتایج را در یک تیبل ذخیره میکند (نوع خاصی از قاب داده که توسط مجموعه بستههای tidyverse استفاده میشود).
available_teams <- select(skeds, homeTeamName) %>% distinct() %>% collect()
Complete Billed: 10.49 MB Downloading 31 rows in 1 pages.
توجه به قیمت: من پرس و جوی بالا را با استفاده از بیانیه SQL که به دنبال اطلاعات مشابه بود بررسی کردم:
SELECT DISTINCT `homeTeamName`
FROM `bigquery-public-data.baseball.schedules`
وقتی این کار را انجام دادم، ویرایشگر وب BigQuery نشان داد که فقط ۲۱.۱ کیلوبایت داده پردازش شده است، نه بیشتر از ۱۰ مگابایت. چرا اینقدر بیشتر از من صورتحساب دریافت کردند؟ جستجوها حداقل ۱۰ مگابایت دارند (و به مگابایت بعدی گرد می شوند).
بهعلاوه: اگر میخواهید نتایج یک جستار R را به جای یک قاب داده محلی در یک جدول BigQuery موقت ذخیره کنید، میتوانید compute(name = "my_temp_table") را اضافه کنید. code> به جای
collect()
به انتهای لوله خود بروید. با این حال، باید در پروژهای کار کنید که در آن مجوز ایجاد جداول را دارید، و پروژه دادههای عمومی Google قطعاً چنین نیست.
اگر همان کد را بدون collect()
اجرا کنید، مانند
available_teams <- select(skeds, homeTeamName) %>%
distinct()
شما پرسمان را ذخیره میکنید و نه نتایج پرسش. توجه داشته باشید که available_teams اکنون یک آبجکت query با کلاسهای tbl_sql
، tbl_BigQueryConnection
، tbl_dbi
و tbl_lazy
است (تنبلی به معنای آن است. اجرا نمی شود مگر اینکه به طور خاص فراخوانی شود).
شما می توانید پرس و جو ذخیره شده را با استفاده از نام شیء به تنهایی در یک اسکریپت اجرا کنید:
available_teams
SQL dplyr تولید شده را ببینید
میتوانید SQL را که توسط دستورات dplyr شما تولید میشود، با show_query()
در انتهای لولههای زنجیرهدار خود مشاهده کنید:
select(skeds, homeTeamName) %>%
distinct() %>%
show_query() <SQL> SELECT DISTINCT `homeTeamName` FROM `schedules`
میتوانید این SQL را در رابط وب BigQuery برش دهید و جایگذاری کنید تا ببینید چه مقدار داده استفاده میکنید. فقط به یاد داشته باشید که نام جدول ساده مانند "زمان بندی" را به نحو "project.dataset.tablename" تغییر دهید. در این مورد، `bigquery-public-data.baseball.schedules`.
اگر برای بار دوم در جلسه R خود همان عبارت را اجرا کنید، دیگر برای تجزیه و تحلیل داده ها صورتحساب دریافت نمی کنید زیرا BigQuery از نتایج ذخیره شده در حافظه پنهان استفاده می کند.
SQL را در BigQuery در R
اجرا کنید
اگر در نوشتن عبارتهای جستجوی SQL راحت هستید، اگر میخواهید دادهها را از BigQuery به عنوان بخشی از یک گردش کار بزرگتر R بکشید، میتوانید دستورات SQL را نیز در R اجرا کنید.
برای مثال، فرض کنید میخواهید این دستور SQL را اجرا کنید:
SELECT DISTINCT `homeTeamName` from `bigquery-public-data.baseball.schedules`
می توانید این کار را در R با استفاده از تابع dbGetQuery()
بسته DBI انجام دهید. کد اینجاست:
sql <- "SELECT DISTINCT homeTeamName from bigquery-public-data.baseball.schedules" library(DBI) my_results <- dbGetQuery(con, sql) Complete Billed: 10.49 MB Downloading 31 rows in 1 pages
توجه داشته باشید که من دوباره برای پرس و جو صورت حساب دریافت کردم زیرا BigQuery یک پرس و جو در R و دیگری در SQL را دقیقاً یکسان در نظر نمی گیرد، حتی اگر آنها به دنبال داده های یکسانی باشند.
اگر دوباره آن عبارت SQL را اجرا کنم، صورتحساب دریافت نمیکنم.
my_results2 <- dbGetQuery(con, sql) Complete Billed: 0 B Downloading 31 rows in 1 pages.
BigQuery و R
پس از یک بار راه اندازی اولیه، تجزیه و تحلیل داده های BigQuery در R به همان اندازه که اجرای کد dplyr روی یک قاب داده محلی آسان است. فقط هزینه های درخواست خود را در نظر داشته باشید. اگر در حال اجرای ده ها پرس و جو در یک مجموعه داده ۱۰ گیگابایتی هستید، به سهمیه ماهانه ۱ ترابایتی رایگان خود نزدیک نخواهید شد. اما اگر روزانه روی مجموعههای دادهای بزرگتر کار میکنید، بهتر است به دنبال راههایی برای سادهسازی کد خود باشید.
برای راهنماییها و آموزشهای بیشتر، به بیشتر با R را انجام دهید من سر بزنید.
پست های مرتبط
نحوه استفاده از R با BigQuery
نحوه استفاده از R با BigQuery
نحوه استفاده از R با BigQuery