<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>BigQuery  |  script life 千夜一夜 プログラミング別館</title>
	<atom:link href="https://www.scriptlife.jp/contents/programming/tag/bigquery/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.scriptlife.jp/contents/programming</link>
	<description>AWSとかプログラミングのこととかいろいろ</description>
	<lastBuildDate>Thu, 20 Dec 2018 16:06:13 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.8.6</generator>
	<item>
		<title>[GCP] 複数テーブルを横断して検索する</title>
		<link>https://www.scriptlife.jp/contents/programming/2018/12/21/gcp-bq-select-many-tables/</link>
					<comments>https://www.scriptlife.jp/contents/programming/2018/12/21/gcp-bq-select-many-tables/#respond</comments>
		
		<dc:creator><![CDATA[かげろ]]></dc:creator>
		<pubDate>Thu, 20 Dec 2018 16:06:13 +0000</pubDate>
				<category><![CDATA[BigQuery]]></category>
		<category><![CDATA[Google Cloud Platform (GCP)]]></category>
		<category><![CDATA[GCP]]></category>
		<guid isPermaLink="false">https://www.scriptlife.jp/contents/programming/?p=3361</guid>

					<description><![CDATA[　GCPでは毎日のログなどを保存するときテーブル名に日付を入れてパーティショニングしたりするので、複数のテーブルをSELECTの対象にしたく...]]></description>
										<content:encoded><![CDATA[<p>　GCPでは毎日のログなどを保存するときテーブル名に日付を入れてパーティショニングしたりするので、複数のテーブルをSELECTの対象にしたくなるときがあります。</p>
<h2>「*」(ワイルドカード)でテーブル名を指定する</h2>
<p>　SELECT文に「*」を入れることで、その他の部分にマッチしたテーブル名を持つ複数のテーブルを横断して検索することができます。</p>
<p>　例えば次のテーブル名でテーブルを作成します。</p>
<ul>
<li>sample_20181218</li>
<li>sample_20181219</li>
<li>sample_20181220</li>
</ul>
<p>このテーブルに、次のデータを入れておきます。</p>
<table>
<tbody>
<tr>
<td style="text-align: center;"><strong>テーブル</strong></td>
<td style="text-align: center;"><strong>id</strong></td>
<td style="text-align: center;"><strong>timestamp</strong></td>
</tr>
<tr>
<td>sample_20181218</td>
<td>1</td>
<td>2018-12-18</td>
</tr>
<tr>
<td>sample_20181219</td>
<td>1</td>
<td>2018-12-19</td>
</tr>
<tr>
<td>sample_20181220</td>
<td>1</td>
<td>2018-12-20</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>　次のSELECT文を実行するとすべて対象に出来ます。</p>
<pre class="lang:default decode:true">SELECT * FROM `xxxx.sample.sample_201812*`</pre>
<p>結果。</p>
<p><a href="https://www.scriptlife.jp/contents/programming/wp-content/uploads/SnapCrab_NoName_2018-12-21_0-54-55_No-00.png"><img loading="lazy" class="alignnone size-medium wp-image-3363" src="https://www.scriptlife.jp/contents/programming/wp-content/uploads/SnapCrab_NoName_2018-12-21_0-54-55_No-00-300x88.png" alt="" width="300" height="88" srcset="https://www.scriptlife.jp/contents/programming/wp-content/uploads/SnapCrab_NoName_2018-12-21_0-54-55_No-00-300x88.png 300w, https://www.scriptlife.jp/contents/programming/wp-content/uploads/SnapCrab_NoName_2018-12-21_0-54-55_No-00-768x225.png 768w, https://www.scriptlife.jp/contents/programming/wp-content/uploads/SnapCrab_NoName_2018-12-21_0-54-55_No-00-1024x300.png 1024w, https://www.scriptlife.jp/contents/programming/wp-content/uploads/SnapCrab_NoName_2018-12-21_0-54-55_No-00-320x94.png 320w, https://www.scriptlife.jp/contents/programming/wp-content/uploads/SnapCrab_NoName_2018-12-21_0-54-55_No-00.png 1035w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>　3つのテーブルに登録されているデータを抽出することができました。</p>
<p>&nbsp;</p>
<h2>対象となるテーブルをさらに_TABLE_SUFFIXで絞り込む</h2>
<p>　横断検索できるのは便利ですが、対象テーブルが多くなりすぎるとデータ量が増えたり時間が掛かったりしてそれはそれで困ります。</p>
<p>　そこで<strong>_TABLE_SUFFIX疑似列</strong>を用いると「*」でフィルタされたところからさらに絞り込むことが出来ます。</p>
<p>　_TABLE_SUFFIX疑似列には、「*」でマッチした文字列が入ってきますので、それをWHERE句で判定します。</p>
<pre class="lang:default decode:true">SELECT * FROM `xxxx.sample.sample_201812*` 
WHERE _TABLE_SUFFIX = '18' OR _TABLE_SUFFIX = '20'</pre>
<p>とすれば、「sample_20181218」と「sample_20181220」が対象になります。</p>
<p><a href="https://www.scriptlife.jp/contents/programming/wp-content/uploads/SnapCrab_NoName_2018-12-21_0-54-38_No-00.png"><img loading="lazy" class="alignnone size-medium wp-image-3364" src="https://www.scriptlife.jp/contents/programming/wp-content/uploads/SnapCrab_NoName_2018-12-21_0-54-38_No-00-300x79.png" alt="" width="300" height="79" srcset="https://www.scriptlife.jp/contents/programming/wp-content/uploads/SnapCrab_NoName_2018-12-21_0-54-38_No-00-300x79.png 300w, https://www.scriptlife.jp/contents/programming/wp-content/uploads/SnapCrab_NoName_2018-12-21_0-54-38_No-00-768x201.png 768w, https://www.scriptlife.jp/contents/programming/wp-content/uploads/SnapCrab_NoName_2018-12-21_0-54-38_No-00-1024x268.png 1024w, https://www.scriptlife.jp/contents/programming/wp-content/uploads/SnapCrab_NoName_2018-12-21_0-54-38_No-00-320x84.png 320w, https://www.scriptlife.jp/contents/programming/wp-content/uploads/SnapCrab_NoName_2018-12-21_0-54-38_No-00.png 1049w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>　さらにここで注目してほしいのは、右上の処理バイト数です。</p>
<p>　全体を指定したSELECT文は48 B、「18」と「20」を指定したSELECT文は<strong>32 B</strong>となっています。</p>
<p>　この数値はBigQueryで検索対象となるデータサイズで料金に直結するところです。</p>
<p>　つまり_TABLESUFFIXであらかじめフィルタリングできれば、料金も節約することができます。</p>
<p>&nbsp;</p>
<p>参考：<a href="https://cloud.google.com/bigquery/docs/wildcard-tables?hl=ja">ワイルドカード テーブル</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.scriptlife.jp/contents/programming/2018/12/21/gcp-bq-select-many-tables/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>[GCP] BigQueryのテーブル名を変更する</title>
		<link>https://www.scriptlife.jp/contents/programming/2018/11/30/gcp-bigquery-rename/</link>
					<comments>https://www.scriptlife.jp/contents/programming/2018/11/30/gcp-bigquery-rename/#respond</comments>
		
		<dc:creator><![CDATA[かげろ]]></dc:creator>
		<pubDate>Thu, 29 Nov 2018 15:27:53 +0000</pubDate>
				<category><![CDATA[BigQuery]]></category>
		<category><![CDATA[Google Cloud Platform (GCP)]]></category>
		<category><![CDATA[GCP]]></category>
		<guid isPermaLink="false">https://www.scriptlife.jp/contents/programming/?p=3321</guid>

					<description><![CDATA[　BigQueryテーブルのリネームについて。 テーブルのリネームはできない 　まず始めに…テーブルのリネーム機能は提供されていないようです...]]></description>
										<content:encoded><![CDATA[<p>　BigQueryテーブルのリネームについて。</p>
<h2>テーブルのリネームはできない</h2>
<p>　まず始めに…<strong>テーブルのリネーム機能は提供されていない</strong>ようです。(2018年11月現在)</p>
<div class="blog-card external-blog-card blog-card-thumbnail-left cf"><div class="blog-card-thumbnail"><a href="https://cloud.google.com/bigquery/docs/managing-tables" class="blog-card-thumbnail-link"><img src="https://www.scriptlife.jp/contents/programming/wp-content/uploads/simplicity-cache/c193befae2b22183db2de37e2c6b61a9.png" alt="" class="blog-card-thumb-image" height="100" width="100" /></a></div><div class="blog-card-content"><div class="blog-card-title"><a href="https://cloud.google.com/bigquery/docs/managing-tables" class="blog-card-title-link">Manage tables  |  BigQuery  |  Google Cloud</a></div><div class="blog-card-excerpt">Shows how to manage tables in BigQuery--how to rename, copy, and delete them; update their properties; and restore deleted tables. Includes examples using the G...</div></div><div class="blog-card-footer"><div class="blog-card-site"><span class="blog-card-favicon"><img src="//www.google.com/s2/favicons?domain=cloud.google.com" class="blog-card-favicon-img" alt="" width="16" height="16" /></span>cloud.google.com</div><div class="blog-card-hatebu"><a href="//b.hatena.ne.jp/entry/https://cloud.google.com/bigquery/docs/managing-tables" rel="nofollow"><img src="//b.hatena.ne.jp/entry/image/https://cloud.google.com/bigquery/docs/managing-tables" alt="" /></a></div></div></div>
<blockquote><p>
テーブルの名前の変更<br />
現時点では、既存のテーブルの名前を変更することはできません。テーブル名を変更する場合は、テーブルをコピーする手順に従ってください。コピー オペレーションでコピー先のテーブルを指定する際に新しいテーブル名を使用します。
</p></blockquote>
<p>　つまり、<strong>「コピーして元のテーブルを削除」</strong>することになります。</p>
<h2>テーブルのコピーはすぐに完了する</h2>
<p>　とはいえ、BigQueryテーブルのコピーは<strong>驚くほど早く終わります。</strong></p>
<p>　<strong>数十GBとかあっても数秒で終わります…</strong></p>
<p>　おそらく内部的には、ハッシュにタグ付けしてるような感じなのかなと思ってます。</p>
<p>　分割テーブルだとパーティションごとに処理していたりするのか、容量にかかわらず少し時間が掛かるようですが、それでも1分程度で終わりました。</p>
<p>&nbsp;</p>
<p>　バックアップからレストアするときなど、元になるテーブルが存在している場合は先に削除する必要があるので少し勇気が要りますが、作業時間的には「コピーして削除」で全く問題ない感じです。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.scriptlife.jp/contents/programming/2018/11/30/gcp-bigquery-rename/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>[GCP] BigQueryテーブルにデータを登録する</title>
		<link>https://www.scriptlife.jp/contents/programming/2018/11/30/gcp-bigquery-data-load/</link>
					<comments>https://www.scriptlife.jp/contents/programming/2018/11/30/gcp-bigquery-data-load/#respond</comments>
		
		<dc:creator><![CDATA[かげろ]]></dc:creator>
		<pubDate>Thu, 29 Nov 2018 15:14:20 +0000</pubDate>
				<category><![CDATA[BigQuery]]></category>
		<category><![CDATA[Google Cloud Platform (GCP)]]></category>
		<category><![CDATA[GCP]]></category>
		<guid isPermaLink="false">https://www.scriptlife.jp/contents/programming/?p=3311</guid>

					<description><![CDATA[　最近BigQueryを使う機会があって、データのインポートの仕方がbq loadの他にもいろいろあったことが意外だったので調べたぶんだけま...]]></description>
										<content:encoded><![CDATA[<p>　最近BigQueryを使う機会があって、データのインポートの仕方がbq loadの他にもいろいろあったことが意外だったので調べたぶんだけまとめてみました。</p>
<p>　Web UIからファイル指定で追加できるようになっていたりINSERT文が使えるようになっていたりするのが、ちょっと試すときとかにすごい便利です。</p>
<h2>テーブル作成時に登録する</h2>
<p>　テーブルを作るときに登録する方法です。</p>
<p>「テーブルの作成」で、「テーブルの作成元」プルダウンメニューを変更することで初期データが登録できます。</p>
<p> CSVファイルをアップロードして登録するときはこんな感じで。</p>
<p><a href="https://www.scriptlife.jp/contents/programming/wp-content/uploads/SnapCrab_NoName_2018-11-29_23-25-58_No-00.png"><img loading="lazy" class="alignnone size-medium wp-image-3312" src="https://www.scriptlife.jp/contents/programming/wp-content/uploads/SnapCrab_NoName_2018-11-29_23-25-58_No-00-300x263.png" alt="" width="300" height="263" srcset="https://www.scriptlife.jp/contents/programming/wp-content/uploads/SnapCrab_NoName_2018-11-29_23-25-58_No-00-300x263.png 300w, https://www.scriptlife.jp/contents/programming/wp-content/uploads/SnapCrab_NoName_2018-11-29_23-25-58_No-00-320x281.png 320w, https://www.scriptlife.jp/contents/programming/wp-content/uploads/SnapCrab_NoName_2018-11-29_23-25-58_No-00.png 682w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>　ただ、ここでCSVファイルの方にヘッダが設定されていると、それがデータとして読み込まれてしまいエラーになってしまいます。</p>
<blockquote><p>
id,name<br />
 1,りんご<br />
 2,みかん<br />
 3,いちご
</p></blockquote>
<p>　中身がこういうファイルとかですね。</p>
<p>　その場合はヘッダ行を削除したファイルを作るか、「詳細オプション &gt; スキップするヘッダー行」の数値を調整します。</p>
<p><a href="https://www.scriptlife.jp/contents/programming/wp-content/uploads/SnapCrab_NoName_2018-11-29_23-29-36_No-00.png"><img loading="lazy" class="alignnone size-medium wp-image-3313" src="https://www.scriptlife.jp/contents/programming/wp-content/uploads/SnapCrab_NoName_2018-11-29_23-29-36_No-00-300x143.png" alt="" width="300" height="143" srcset="https://www.scriptlife.jp/contents/programming/wp-content/uploads/SnapCrab_NoName_2018-11-29_23-29-36_No-00-300x143.png 300w, https://www.scriptlife.jp/contents/programming/wp-content/uploads/SnapCrab_NoName_2018-11-29_23-29-36_No-00-320x152.png 320w, https://www.scriptlife.jp/contents/programming/wp-content/uploads/SnapCrab_NoName_2018-11-29_23-29-36_No-00.png 597w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>あと、CSVファイルはUTF-8である必要があります…SJISテキストだとこうです。</p>
<p><a href="https://www.scriptlife.jp/contents/programming/wp-content/uploads/SnapCrab_NoName_2018-11-29_23-30-25_No-00.png"><img loading="lazy" class="alignnone size-full wp-image-3314" src="https://www.scriptlife.jp/contents/programming/wp-content/uploads/SnapCrab_NoName_2018-11-29_23-30-25_No-00.png" alt="" width="272" height="233" /></a></p>
<h2>テーブルに追加する</h2>
<p>　「テーブルを作成」で、すでにあるテーブル名を指定し、「詳細オプション &gt; 書き込み設定」を「テーブルに追加する」にすることで、既存のテーブルにデータファイルを追加することができます。</p>
<p>　その際には「スキーマ」の「自動検出」にチェックを入れておくと、既存のテーブルのものを使ってくるようで楽です。</p>
<h2>bq loadで登録する</h2>
<p>　bqコマンドを使用する方法です。テーブル名とデータファイル、スキーマを定義したJSONが必要です。</p>
<p>　ローカルのファイルを指定する場合はそのまま。</p>
<blockquote><p>
<br />
$ bq load --skip_leading_rows=1 sample.fruits fruits.csv fruits_schema.json<br />
Upload complete.<br />
Waiting on bqjob_r480de7ee_000001675ff3da58_1 ... (0s) Current status: DONE
</p></blockquote>
<p>　Google Cloud Storageに置いてあるファイルなどもいけます。</p>
<blockquote><p>
$ bq load --skip_leading_rows=1 sample.fruits gs://(バケット名)/fruits.csv fruits_schema.json<br />
Waiting on bqjob_r3b7e2b3d_000001675ff98507_1 ... (1s) Current status: DONE
</p></blockquote>
<p>ストレージ上ではgzip圧縮されたファイルも指定できるため、テキストデータをそのまま使うより効率よくアップロードできます。</p>
<h2>INSERT文を使う</h2>
<p>　BigQueryからそのままINSERT文が使えます。</p>
<blockquote><p>
INSERT INTO (データセット).fruits (id, name) VALUES (100, 'バナナ')
</p></blockquote>
<p>こちらはStandard SQLから有効になっているようです。</p>
<p>&nbsp;</p>
<p>INSERT文が使えるので、SELECTからINSERTも使えるようになっています。</p>
<blockquote><p>
INSERT INTO (データセット).fruits (id, name) SELECT id, name FROM (データセット).fruits2
</p></blockquote>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>その他</h2>
<p>　登録できるファイル形式やオプションなどは公式ドキュメントが詳しいです。</p>
<p>&nbsp;</p>
<p>参考：</p>
<div class="blog-card external-blog-card blog-card-thumbnail-left cf"><div class="blog-card-thumbnail"><a href="https://cloud.google.com/bigquery/docs/loading-data?authuser=3&hl=ja" class="blog-card-thumbnail-link"><img src="https://www.scriptlife.jp/contents/programming/wp-content/uploads/simplicity-cache/c193befae2b22183db2de37e2c6b61a9.png" alt="" class="blog-card-thumb-image" height="100" width="100" /></a></div><div class="blog-card-content"><div class="blog-card-title"><a href="https://cloud.google.com/bigquery/docs/loading-data?authuser=3&hl=ja" class="blog-card-title-link">データの読み込みの概要  |  BigQuery  |  Google Cloud</a></div><div class="blog-card-excerpt"></div></div><div class="blog-card-footer"><div class="blog-card-site"><span class="blog-card-favicon"><img src="//www.google.com/s2/favicons?domain=cloud.google.com" class="blog-card-favicon-img" alt="" width="16" height="16" /></span>cloud.google.com</div><div class="blog-card-hatebu"><a href="//b.hatena.ne.jp/entry/https://cloud.google.com/bigquery/docs/loading-data?authuser=3&hl=ja" rel="nofollow"><img src="//b.hatena.ne.jp/entry/image/https://cloud.google.com/bigquery/docs/loading-data?authuser=3&hl=ja" alt="" /></a></div></div></div>
<div class="blog-card external-blog-card blog-card-thumbnail-left cf"><div class="blog-card-thumbnail"><a href="https://cloud.google.com/bigquery/bq-command-line-tool?hl=ja" class="blog-card-thumbnail-link"><img src="https://www.scriptlife.jp/contents/programming/wp-content/uploads/simplicity-cache/c193befae2b22183db2de37e2c6b61a9.png" alt="" class="blog-card-thumb-image" height="100" width="100" /></a></div><div class="blog-card-content"><div class="blog-card-title"><a href="https://cloud.google.com/bigquery/bq-command-line-tool?hl=ja" class="blog-card-title-link">bq コマンドライン ツールの使用  |  BigQuery  |  Google Cloud</a></div><div class="blog-card-excerpt">bq コマンドライン ツールと、そのデフォルト値とフラグの設定方法について説明します。対話型シェル、スクリプト、サービス アカウントで bq コマンドライン ツールを使用してクエリを実行する方法を示します。</div></div><div class="blog-card-footer"><div class="blog-card-site"><span class="blog-card-favicon"><img src="//www.google.com/s2/favicons?domain=cloud.google.com" class="blog-card-favicon-img" alt="" width="16" height="16" /></span>cloud.google.com</div><div class="blog-card-hatebu"><a href="//b.hatena.ne.jp/entry/https://cloud.google.com/bigquery/bq-command-line-tool?hl=ja" rel="nofollow"><img src="//b.hatena.ne.jp/entry/image/https://cloud.google.com/bigquery/bq-command-line-tool?hl=ja" alt="" /></a></div></div></div>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.scriptlife.jp/contents/programming/2018/11/30/gcp-bigquery-data-load/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
