Help
RSS
API
Feed
Maltego
Contact
Domain > smrmkt.hatenablog.jp
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2014-12-29
54.64.13.59
(
ClassC
)
2025-12-09
3.175.34.19
(
ClassC
)
Port 80
HTTP/1.1 301 Moved PermanentlyServer: CloudFrontDate: Tue, 09 Dec 2025 19:04:32 GMTContent-Type: text/htmlContent-Length: 167Connection: keep-aliveLocation: https://smrmkt.hatenablog.jp/X-Cache: Redirect from cloudfrontVia: 1.1 13db0457431959c4a11b5f54c65b5688.cloudfront.net (CloudFront)X-Amz-Cf-Pop: HIO52-P3X-Amz-Cf-Id: XeSCjhKrGruavrQmlBXZ9iah62dbdnI-LXElGg1AKiplvnQuh8Mnjg html>head>title>301 Moved Permanently/title>/head>body>center>h1>301 Moved Permanently/h1>/center>hr>center>CloudFront/center>/body>/html>
Port 443
HTTP/1.1 200 OKContent-Type: text/html; charsetutf-8Transfer-Encoding: chunkedConnection: keep-aliveServer: nginxDate: Tue, 09 Dec 2025 19:04:32 GMTCache-Control: privateX-Proxy-Revision: 7916d4d52af4bbf5a06aafa73792d9e425b28618Vary: Accept-EncodingVary: X-Epic-Device-Type,X-Epic-Flag-Variants,Accept-EncodingAccess-Control-Allow-Origin: *Content-Security-Policy: frame-ancestors none; upgrade-insecure-requestsContent-Security-Policy-Report-Only: block-all-mixed-content; report-uri https://blog.hatena.ne.jp/api/csp_reportP3P: CPOTI CUR OUR BUS STAX-Cache-Only-Varnish: 1X-Content-Type-Options: nosniffX-Dispatch: Hatena::Epic::Web::Blogs::Index#indexX-Frame-Options: DENYX-Revision: abf96f4605410ec3d67a4284c01b45X-XSS-Protection: 1X-Runtime: 0.097005X-Varnish: 4784921Via: 1.1 ip-10-1-12-236.ap-northeast-1.compute.internal (Varnish/7.6), 1.1 6b0264d1694ae38286bac63d55b3986a.cloudfront.net (CloudFront)Strict-Transport-Security: max-age2592000;X-Cache: Miss from cloudfrontX-Amz-Cf-Pop: HIO52-P3X-Amz-Cf-Id: pGUI2Ixrckvbkt7qDxnOW-iAEowa590tvtNdBA_tsi5PkahB1rOOTAAge: 0 !DOCTYPE html>html langjadata-admin-domain//blog.hatena.ne.jpdata-admin-originhttps://blog.hatena.ne.jpdata-authorSAMdata-avail-langsja endata-blogsmrmkt.hatenablog.jpdata-blog-hostsmrmkt.hatenablog.jpdata-blog-is-public1data-blog-nameAbout connecting the dots.data-blog-ownerSAMdata-blog-show-ads1data-blog-show-sleeping-ads1data-blog-urihttps://smrmkt.hatenablog.jp/data-blog-uuid12704830469096399317data-blogs-uri-basehttps://smrmkt.hatenablog.jpdata-brandhatenablogdata-data-layer{"hatenablog":{"admin":{},"analytics":{"brand_property_id":"","measurement_id":"","non_sampling_property_id":"","property_id":"UA-39921729-1","separated_property_id":"UA-29716941-18"},"blog":{"blog_id":"12704830469096399317","content_seems_japanese":"true","disable_ads":"","enable_ads":"true","enable_keyword_link":"true","entry_show_footer_related_entries":"true","force_pc_view":"false","is_public":"true","is_responsive_view":"false","is_sleeping":"true","lang":"ja","name":"About connecting the dots.","owner_name":"SAM","uri":"https://smrmkt.hatenablog.jp/"},"brand":"hatenablog","page_id":"index","permalink_entry":null,"pro":"free","router_type":"blogs"}}data-devicepcdata-dont-recommend-profalsedata-global-domainhttps://hatena.blogdata-globalheader-colorbdata-globalheader-typepcdata-has-touch-view1data-help-urlhttps://help.hatenablog.comdata-pageindexdata-parts-domainhttps://hatenablog-parts.comdata-plus-availabledata-profalsedata-router-typeblogsdata-sentry-dsnhttps://03a33e4781a24cf2885099fed222b56d@sentry.io/1195218data-sentry-environmentproductiondata-sentry-sample-rate0.1data-static-domainhttps://cdn.blog.st-hatena.comdata-versionabf96f4605410ec3d67a4284c01b45 data-initial-state{} > head prefixog: http://ogp.me/ns# fb: http://ogp.me/ns/fb#> meta namerobots contentmax-image-preview:large /> meta charsetutf-8/> meta http-equivX-UA-Compatible contentIE7; IE9; IE10; IE11 /> title>About connecting the dots./title> link relcanonical hrefhttps://smrmkt.hatenablog.jp//> meta itempropname contentAbout connecting the dots./> meta itempropimage contenthttps://cdn.blog.st-hatena.com/images/theme/og-image-1500.png/> meta propertyog:title contentAbout connecting the dots./>meta propertyog:type contentblog/> meta propertyog:url contenthttps://smrmkt.hatenablog.jp//> meta propertyog:image contenthttps://cdn.blog.st-hatena.com/images/theme/og-image-1500.png/>meta propertyog:image:alt contentAbout connecting the dots./> meta propertyog:description contentdata science related trivial things />meta propertyog:site_name contentAbout connecting the dots./> meta nametwitter:card contentsummary_large_image /> meta nametwitter:image contenthttps://cdn.blog.st-hatena.com/images/theme/og-image-1500.png /> meta nametwitter:title contentAbout connecting the dots. /> meta nametwitter:description contentdata science related trivial things /> meta nametwitter:app:name:iphone contentはてなブログアプリ /> meta nametwitter:app:id:iphone content583299321 /> meta nametwitter:app:url:iphone contenthatenablog:///open?urihttps%3A%2F%2Fsmrmkt.hatenablog.jp%2F /> meta namegoogle-site-verification contentjya52QR7s-nFfNijhdl1W1Zx8G-F-pGb-oE0ac9w0w8 /> script idembed-gtm-data-layer-loader data-data-layer-page-specific>(function() { function loadDataLayer(elem, attrName) { if (!elem) { return {}; } var json elem.getAttribute(attrName); if (!json) { return {}; } return JSON.parse(json); } var globalVariables loadDataLayer( document.documentElement, data-data-layer ); var pageSpecificVariables loadDataLayer( document.getElementById(embed-gtm-data-layer-loader), data-data-layer-page-specific ); var variables globalVariables, pageSpecificVariables; if (!window.dataLayer) { window.dataLayer ; } for (var i 0; i variables.length; i++) { window.dataLayer.push(variablesi); }})();/script>!-- Google Tag Manager -->script>(function(w,d,s,l,i){wlwl||;wl.push({gtm.start:new Date().getTime(),event:gtm.js});var fd.getElementsByTagName(s)0,jd.createElement(s),dll!dataLayer?&l+l:;j.asynctrue;j.srchttps://www.googletagmanager.com/gtm.js?id+i+dl;f.parentNode.insertBefore(j,f);})(window,document,script,dataLayer,GTM-P4CXTW);/script>!-- End Google Tag Manager --> link relshortcut icon hrefhttps://smrmkt.hatenablog.jp/icon/favicon>link relapple-touch-icon hrefhttps://smrmkt.hatenablog.jp/icon/touch>link relicon sizes192x192 hrefhttps://smrmkt.hatenablog.jp/icon/link> link relalternate typeapplication/atom+xml titleAtom hrefhttps://smrmkt.hatenablog.jp/feed/>link relalternate typeapplication/rss+xml titleRSS2.0 hrefhttps://smrmkt.hatenablog.jp/rss/> link relauthor hrefhttp://www.hatena.ne.jp/SAM/> link relstylesheet typetext/css hrefhttps://cdn.blog.st-hatena.com/css/blog.css?versionabf96f4605410ec3d67a4284c01b45/> link relstylesheet typetext/css hrefhttps://usercss.blog.st-hatena.com/blog_style/12704830469096399317/468ceee64780a63848305a2d80e6c51e7b0a853c/> script> /script> style> div#google_afc_user, div.google-afc-user-container, div.google_afc_image, div.google_afc_blocklink { display: block !important; }/style> script srchttps://cdn.pool.st-hatena.com/valve/valve.js async>/script>script idtest-valve-definition> var valve window.valve || ; valve.push(function(v) { v.config({ service: blog, content: { result: adtrust, documentIds: blog:entry:4207112889940426014,blog:entry:4207112889929951849,blog:entry:13574176438037769581,blog:entry:17391345971645367791,blog:entry:17391345971615390101,blog:entry:8599973812311146857,blog:entry:10328749687260606384 } }); v.defineDFPSlot({sizes:300,250,336,280,slotId:google_afc_user_container_0,unit:/4374287/blo_pc_com_6_3328_0_no}); v.defineDFPSlot({lazy:1,sizes:{mappings:320,568,336,280,300,250,fluid,0,0,300,250},slotId:sleeping-ad-in-entry,unit:/4374287/blog_pc_entry_sleep_in-article}); v.defineDFPSlot({lazy:,sizes:300,250,336,280,468,60,fluid,slotId:google_afc_user_container_1,unit:/4374287/blog_user}); v.defineDFPSlot({lazy:,sizes:300,250,336,280,468,60,fluid,slotId:google_afc_user_container_2,unit:/4374287/blog_user_2nd}); v.defineDFPSlot({lazy:,sizes:300,250,336,280,468,60,fluid,slotId:google_afc_user_container_3,unit:/4374287/blog_user_2nd}); v.defineDFPSlot({lazy:1,sizes:300,250,336,280,468,60,fluid,slotId:google_afc_user_container_4,unit:/4374287/blog_user_2nd}); v.defineDFPSlot({lazy:1,sizes:300,250,336,280,468,60,fluid,slotId:google_afc_user_container_5,unit:/4374287/blog_user_2nd}); v.defineDFPSlot({lazy:1,sizes:300,250,336,280,468,60,fluid,slotId:google_afc_user_container_6,unit:/4374287/blog_user_2nd}); v.defineDFPSlot({lazy:1,sizes:300,250,336,280,468,60,fluid,slotId:google_afc_user_container_7,unit:/4374287/blog_user_2nd}); v.sealDFPSlots(); });/script> script typeapplication/ld+json>{@context:https://schema.org,@type:WebSite,name:About connecting the dots.,url:https://smrmkt.hatenablog.jp/}/script> /head> body classpage-index enable-bottom-editarea globalheader-ng-enabled> div idglobalheader-container data-brandhatenablog > iframe idglobalheader height37 frameborder0 allowTransparencytrue>/iframe>/div> nav class blog-controlls > div classblog-controlls-blog-icon> a hrefhttps://smrmkt.hatenablog.jp/> img srchttps://cdn.blog.st-hatena.com/images/admin/blog-icon-noimage.png altAbout connecting the dots./> /a> /div> div classblog-controlls-title> a hrefhttps://smrmkt.hatenablog.jp/>About connecting the dots./a> /div> a hrefhttps://blog.hatena.ne.jp/SAM/smrmkt.hatenablog.jp/subscribe?utm_mediumbutton&utm_campaignsubscribe_blog&utm_sourceblogs_topright_button classblog-controlls-subscribe-btn test-blog-header-controlls-subscribe> 読者になる /a> /nav> div idcontainer> div idcontainer-inner> header idblog-title data-brandhatenablog> div idblog-title-inner > div idblog-title-content> h1 idtitle>a hrefhttps://smrmkt.hatenablog.jp/>About connecting the dots./a>/h1> h2 idblog-description>data science related trivial things/h2> /div> /div>/header> div idcontent classhfeed > div idcontent-inner> div idwrapper> div idmain> div idmain-inner> article classentry no-entry sleeping-ads styledisplay: block !important;> div classentry-inner> div classentry-content> div classvariable-mobileWeb-ad> div idgoogle_afc_user_container_0 classsleeping-ad styledisplay: block !important;>/div> /div> p classsleeping-ads-notice styledisplay: none;>この広告は、90日以上更新していないブログに表示しています。/p> /div> /div> /article> !-- google_ad_section_start --> !-- rakuten_ad_target_begin --> article classentry hentry test-hentry js-entry-article date-first autopagerize_page_element chars-5200 words-400 mode-hatena entry-odd identry-4207112889940426014 data-keyword-campaign data-uuid4207112889940426014 data-publication-typeentry> div classentry-inner> header classentry-header> div classdate entry-date first> a hrefhttps://smrmkt.hatenablog.jp/archive/2022/12/05 relnofollow> time datetime2022-12-04T15:00:00Z title2022-12-04T15:00:00Z> span classdate-year>2022/span>span classhyphen>-/span>span classdate-month>12/span>span classhyphen>-/span>span classdate-day>05/span> /time> /a> /div> h1 classentry-title> a hrefhttps://smrmkt.hatenablog.jp/entry/2022/12/05/000000 classentry-title-link bookmark>Amazon Athena の Query Result Reuse で同じクエリの結果を高速に取得する/a>/h1> /header> div classentry-content hatenablog-entry> p>この記事は,a classkeyword hrefhttp://d.hatena.ne.jp/keyword/AWS>AWS/a> Analytics Advent Calendar 2022 の 5 日目の記事になります./p>p>iframe srchttps://hatenablog-parts.com/embed?urlhttps%3A%2F%2Fqiita.com%2Fadvent-calendar%2F2022%2Faws-analytics titleCalendar for AWS Analytics | Advent Calendar 2022 - Qiita classembed-card embed-webcard scrollingno frameborder0 styledisplay: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px; loadinglazy>/iframe>cite classhatena-citation>a hrefhttps://qiita.com/advent-calendar/2022/aws-analytics>qiita.com/a>/cite>/p>p>11/8 に a classkeyword hrefhttp://d.hatena.ne.jp/keyword/Amazon>Amazon/a> Athena が Query Result Reuse をサポートしました.この機能,要するにクエリ結果のキャッシュが使えるようになったとのことで,似たようなクエリを何度も試すような場合には,結果を高速に取得できるようになります.この記事では,実際にいくつかのパターンで利用して,どのくらい効果が出るかを確認できればと思います./p>p>iframe srchttps://hatenablog-parts.com/embed?urlhttps%3A%2F%2Faws.amazon.com%2Fjp%2Fabout-aws%2Fwhats-new%2F2022%2F11%2Famazon-athena-query-result-reuse-accelerate-queries%2F titleAmazon Athena がクエリを高速化するための Query Result Reuse を発表 classembed-card embed-webcard scrollingno frameborder0 styledisplay: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px; loadinglazy>/iframe>cite classhatena-citation>a hrefhttps://aws.amazon.com/jp/about-aws/whats-new/2022/11/amazon-athena-query-result-reuse-accelerate-queries/>aws.amazon.com/a>/cite>br />/p>div classsection> h3 id試してみる>試してみる/h3> div classsection> h4 id集計データ>集計データ/h4> p>まずはマネコン上のクエリエディタから,実際にクエリを投げてみたいと思います.ちなみにこの機能は Athena のバージョン 3 エンジンでのみ使用可能なため,古いバージョンのエンジンを使っている方は,マネコンの左側メニュー Workgroups から,エンジンバージョンを最新の 3 に変更しておきましょう.今回使用したのは手元のテストデータで,5GB ほどのものになります.このくらいだとあまりキャッシュの恩恵はないというのはおいておくとして.../p>pre classcode lang-sql data-langsql data-unlink>span classsynStatement>select/span> calendar_year , calendar_month_number , country_id , cust_city , span classsynIdentifier>count/span>(span classsynConstant>1/span>) , span classsynIdentifier>sum/span>(amount_sold)span classsynSpecial>from/span> sales , customers , timesspan classsynSpecial>where/span> sales.cust_id customers.cust_id span classsynStatement>and/span> sales.time_id times.time_idspan classsynSpecial>group/span> span classsynSpecial>by/span> calendar_year , calendar_month_number , country_id , cust_cityspan classsynSpecial>order/span> span classsynSpecial>by/span> calendar_year , calendar_month_number , country_id , cust_city;/pre>p>クエリを実行した結果は次のとおりです.データスキャン量が 5GB で,実行時間が 15 秒程度となっています.このデータは a classkeyword hrefhttp://d.hatena.ne.jp/keyword/GZip>GZip/a> 圧縮のものだったので,多少オーバーヘッドが出ており時間がかかっています.Parquet フォーマットならもっと早いかとは思います./p>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/S/SAM/20221128/20221128101417.png width1200 height1023 loadinglazy title classhatena-fotolife itempropimage>/span>/p>p>さて,ここで画面に Reuse query results というメニューがあるのが確認できるかと思います.こちらがすでにオンになっているので,同じクエリをもう一度実行すると,今度はキャッシュが使用されるはずです.結果は以下の通り,Completed - using resused query results と表示されており,実際にスキャンされたデータ量が - となっていることも確認できます.結果は 274ms ということで,結果を取ってくるぶんの時間だけですね./p>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/S/SAM/20221128/20221128101536.png width1200 height1063 loadinglazy title classhatena-fotolife itempropimage>/span>br />/p>/div>div classsection> h4 id生データそのまま>生データそのまま/h4> p>それでは次に,大きなデータを吐き出してみます.Athena は大規模データをそのまま持ってくるためのものではないので,結構時間がかかります.正確には,CTAS 等でテーブルとして書き出すのであれば高速に動作しますが,クエリ結果として取得する場合は 1 つの a classkeyword hrefhttp://d.hatena.ne.jp/keyword/csv>csv/a> にまとめる形になるため,並列処理が働かず,結果としてファイルの書き出し部分がa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%DC%A5%C8%A5%EB%A5%CD%A5%C3%A5%AF>ボトルネック/a>となって重くなってしまいます.これは大規模分散データ処理の宿命なので,仕方ないところではありますが./p>pre classcode lang-sql data-langsql data-unlink>span classsynStatement>select/span> *span classsynSpecial>from/span> sales;/pre>p>得られた結果は以下のとおりです.スキャン量は 4 GB 弱ですが,実行に 15 分以上かかりました.となりのタブにある統計情報を見てみると,全部でレコード数が 1.5 億弱行で,圧縮されてない元データサイズは 16.92GB だったことがわかります./p>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/S/SAM/20221128/20221128103549.png width1200 height238 loadinglazy title classhatena-fotolife itempropimage>/span>/p>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/S/SAM/20221128/20221128103833.png width1200 height582 loadinglazy title classhatena-fotolife itempropimage>/span>/p>p>それでは,これをキャッシュを使ってもう一度実行してみるとどうなるでしょうか.当然ですが 229ms で結果が完了します.すばらしいですね.ただ今回はクエリエディタ上からの実行で,先頭の一部の行の結果しか取ってきてないため高速ですが,例えば a classkeyword hrefhttp://d.hatena.ne.jp/keyword/CLI>CLI/a> で結果を丸ごと取ってくる場合には,10GB を超えるデータをもってくるぶんの時間はかかると思われます./p>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/S/SAM/20221128/20221128103939.png width1200 height248 loadinglazy title classhatena-fotolife itempropimage>/span>br />/p>/div>div classsection> h4 idキャッシュ時間の設定>キャッシュ時間の設定/h4> p>キャッシュ再利用時間の設定は,コンソールの Reuse query results のところから設定でき,1 分から 7 日間までの間で選択することができます.このあたりは,クエリ対象データの性質に応じて適宜変えると良いでしょう.このキャッシュ再利用時間設定は,クエリ実行を行う毎に別の値を用いることができます.例えば boto3 経由でクエリ実行する場合には,下記の ResultReuseByAgeConfiguration を ResultReuseConfiguration オプションで設定することが可能です./p>pre classcode lang-python data-langpython data-unlink>span classsynPreProc>import/span> boto3client boto3.client(span classsynConstant>athena/span>)response client.start_query_execution( WorkGroupspan classsynConstant>my_work_group/span>, QueryStringspan classsynConstant>SELECT * FROM my_table LIMIT 10/span>, ResultReuseConfiguration{ span classsynConstant>ResultReuseByAgeConfiguration/span>: { span classsynConstant>Enabled/span>: span classsynIdentifier>True/span>, span classsynConstant>MaxAgeInMinutes/span>: span classsynConstant>60/span> } })/pre>p>a classkeyword hrefhttp://d.hatena.ne.jp/keyword/AWS>AWS/a> a classkeyword hrefhttp://d.hatena.ne.jp/keyword/CLI>CLI/a> でも同様に指定可能です./p>pre classcode lang-sh data-langsh data-unlink>aws athena start-query-execution span classsynStatement>\/span> span classsynSpecial>--work-group/span> span classsynStatement>"/span>span classsynConstant>my_work_group/span>span classsynStatement>"/span> span classsynStatement>\/span> span classsynSpecial>--query-string/span> span classsynStatement>"/span>span classsynConstant>SELECT * FROM my_table LIMIT 10/span>span classsynStatement>"/span> span classsynStatement>\/span> span classsynSpecial>--result-reuse-configuration/span> span classsynStatement>\/span> span classsynStatement>"/span>span classsynConstant>ResultReuseByAgeConfiguration{Enabledtrue,MaxAgeInMinutes60}/span>span classsynStatement>"/span>/pre>/div>/div>div classsection> h3 idキャッシュされたデータとその挙動>キャッシュされたデータとその挙動/h3> div classsection> h4 id置かれている場所>置かれている場所/h4> p>さて,このキャッシュされたデータはどこに置かれているのでしょうか.a hrefhttps://docs.aws.amazon.com/athena/latest/APIReference/API_ResultConfiguration.html>Athena のドキュメント/a>には OutputLocation が条件として書かれているので,普通に考えれば S3 に置かれた結果ファイルを再利用していると想像されます.では,実際にそちらを確認してみましょう.下記のように,Unsaved/YYYY/MM/DD というパスでクエリの実行結果が保存されています./p>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/S/SAM/20221128/20221128104634.png width1200 height566 loadinglazy title classhatena-fotolife itempropimage>/span>/p>p>この結果が実際に使われているかを確かめるために,データを他の場所に移動してみましょう.まずはデータ本体から./p>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/S/SAM/20221128/20221128105046.png width1200 height363 loadinglazy title classhatena-fotolife itempropimage>/span>/p>p>この状態でクエリを再度実行すると,キャッシュが使われることなく,スキャンが走ります.ということで,少なくとも現状では,やはりクエリ結果の出力フォルダにあるデータがキャッシュとして使われていると考えて良さそうです.もちろん実ワークロードで使う際には,ここのファイルを安易に消せるような権限設定にするべきではないわけですが./p>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/S/SAM/20221128/20221128105351.png width1200 height301 loadinglazy title classhatena-fotolife itempropimage>/span>/p>p>ちなみにa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%E1%A5%BF%A5%C7%A1%BC%A5%BF>メタデータ/a>側を削除すると,using reused query results は表示されるのに,結果は取得できないという状況になります./p>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/S/SAM/20221128/20221128182702.png width1200 height232 loadinglazy title classhatena-fotolife itempropimage>/span>br />/p>/div>div classsection> h4 id発動条件について>発動条件について/h4> p>キャッシュ再利用を発動させるためには,a hrefhttps://docs.aws.amazon.com/athena/latest/ug/reusing-query-results.html>ドキュメント/a>に書かれている内容が必要とのことです.特に気になるのは `The query string is an exact match.` とのことで,同一クエリでも半角スペースが一つ入ったり,コメントが入っていたらどうなるのかが気になります.ということで,こちらも検証してみました./p>p>以下のように,2 行目に半角スペースを一つ追加してみたところ,書かれている通りキャッシュは使われず再実行が走りました./p>pre classcode lang-sql data-langsql data-unlink>span classsynStatement>select/span> calendar_year , calendar_month_number , country_id , cust_city , span classsynIdentifier>count/span>(span classsynConstant>1/span>) , span classsynIdentifier>sum/span>(amount_sold)span classsynSpecial>from/span> sales , customers , timesspan classsynSpecial>where/span> sales.cust_id customers.cust_id span classsynStatement>and/span> sales.time_id times.time_idspan classsynSpecial>group/span> span classsynSpecial>by/span> calendar_year , calendar_month_number , country_id , cust_cityspan classsynSpecial>order/span> span classsynSpecial>by/span> calendar_year , calendar_month_number , country_id , cust_city;/pre>p>同様に,コメントを追加したら,やはり結果は再利用されませんでした./p>pre classcode lang-sql data-langsql data-unlink>span classsynComment>/* Test comment *//span>span classsynStatement>select/span> calendar_year , calendar_month_number , country_id , cust_city , span classsynIdentifier>count/span>(span classsynConstant>1/span>) , span classsynIdentifier>sum/span>(amount_sold)span classsynSpecial>from/span> sales , customers , timesspan classsynSpecial>where/span> sales.cust_id customers.cust_id span classsynStatement>and/span> sales.time_id times.time_idspan classsynSpecial>group/span> span classsynSpecial>by/span> calendar_year , calendar_month_number , country_id , cust_cityspan classsynSpecial>order/span> span classsynSpecial>by/span> calendar_year , calendar_month_number , country_id , cust_city;/pre>p>おそらくは,内部的にクエリ文字列をハッシュ変換しており,それと一致しているものがあるかどうかで同一性の確認をしているのだと推測できます.便利ではありますが,気をつけて使わないといけない部分ですね./p>p>これ起因で,QuickSight から接続した場合も,また a classkeyword hrefhttp://d.hatena.ne.jp/keyword/AWS>AWS/a> a classkeyword hrefhttp://d.hatena.ne.jp/keyword/SDK>SDK/a> for Pandas から接続した場合も,現状だとキャッシュ再利用は働かないようです.QuickSight からのクエリに関しては,以下のようにハッシュが入った形の名前がついていたり,また冒頭にコメントが入ってしまう仕様のようです./p>pre classcode lang-sh data-langsh data-unlink>/* QuickSight d9425c29-18c5-4616-9043-973213fbdf0d */ SELECT COUNTspan classsynPreProc>(/span>span classsynSpecial>*/span>span classsynPreProc>)/span> AS span classsynStatement>"/span>span classsynConstant>count/span>span classsynStatement>"/span>, SUMspan classsynPreProc>(/span>span classsynStatement>"/span>span classsynConstant>amount_sold/span>span classsynStatement>"/span>span classsynPreProc>)/span> AS span classsynStatement>"/span>span classsynConstant>9ab75332-3ccf-484d-ad58-9a010e03fd49.amount_sold_sum/span>span classsynStatement>"/span> FROM span classsynStatement>"/span>span classsynConstant>AwsDataCatalog/span>span classsynStatement>"/span>.span classsynStatement>"/span>span classsynConstant>sh10_gz/span>span classsynStatement>"/span>.span classsynStatement>"/span>span classsynConstant>sales/span>span classsynStatement>"/span>/pre>p>a classkeyword hrefhttp://d.hatena.ne.jp/keyword/AWS>AWS/a> a classkeyword hrefhttp://d.hatena.ne.jp/keyword/SDK>SDK/a> for Pandas の場合は,こちらもa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%CF%A5%C3%A5%B7%A5%E5%C3%CD>ハッシュ値/a>のついた temp_table にデータを保存する形になるようなので,キャッシュは使えないということになります./p>pre classcode lang-sh data-langsh data-unlink>CREATE TABLE span classsynStatement>"/span>span classsynConstant>sh10_gz/span>span classsynStatement>"/span>.span classsynStatement>"/span>span classsynConstant>temp_table_7e183e2045e34e1fa52fd0fa8b12e29c/span>span classsynStatement>"/span> WITHspan classsynPreProc>(/span>span classsynSpecial> external_location /span>span classsynStatement>/span>span classsynSpecial> /span>span classsynStatement>/span>span classsynConstant>s3://aws-athena-query-results-666254511816-us-east-1/temp_table_7e183e2045e34e1fa52fd0fa8b12e29c/span>span classsynStatement>/span>span classsynSpecial>, format /span>span classsynStatement>/span>span classsynSpecial> /span>span classsynStatement>/span>span classsynConstant>PARQUET/span>span classsynStatement>/span>span classsynPreProc>)/span> AS select * from sales limit span classsynConstant>1000000/span>/pre>/div>/div>div classsection> h3 idまとめ>まとめ/h3> p>本記事では,a classkeyword hrefhttp://d.hatena.ne.jp/keyword/Amazon>Amazon/a> Athena の Query Result Reuse 機能について,少し突っ込んで中身を色々と確認してみました.いくつか制約はあるものの,色々な可能性のある機能だと思いますので,ぜひ活用していきましょう! また,a hrefhttps://qiita.com/advent-calendar/2022/aws-analytics>AWS Analytics Advent Calendar 2022/a> の他の記事もぜひお楽しみに!/p>/div> /div> footer classentry-footer> div classentry-tags-wrapper> div classentry-tags> /div>/div> p classentry-footer-section track-inview-by-gtm data-gtm-track-json{"area": "finish_reading"}> span classauthor vcard>span classfn data-load-nickname1 data-user-nameSAM >SAM/span>/span> span classentry-footer-time>a hrefhttps://smrmkt.hatenablog.jp/entry/2022/12/05/000000>time data-relative datetime2022-12-04T15:00:00Z title2022-12-04T15:00:00Z classupdated>2022-12-05 00:00/time>/a>/span> span class entry-footer-subscribe data-test-blog-controlls-subscribe> a hrefhttps://blog.hatena.ne.jp/SAM/smrmkt.hatenablog.jp/subscribe?utm_mediumbutton&utm_sourceblogs_entry_footer&utm_campaignsubscribe_blog> 読者になる /a> /span> /p> div classhatena-star-container data-hatena-star-container data-hatena-star-urlhttps://smrmkt.hatenablog.jp/entry/2022/12/05/000000 data-hatena-star-titleAmazon Athena の Query Result Reuse で同じクエリの結果を高速に取得する data-hatena-star-variantprofile-icon data-hatena-star-profile-url-templatehttps://blog.hatena.ne.jp/{username}/ >/div> div classsocial-buttons> div classsocial-button-item> a hrefhttps://b.hatena.ne.jp/entry/s/smrmkt.hatenablog.jp/entry/2022/12/05/000000 classhatena-bookmark-button data-hatena-bookmark-urlhttps://smrmkt.hatenablog.jp/entry/2022/12/05/000000 data-hatena-bookmark-layoutvertical-balloon data-hatena-bookmark-langja titleこの記事をはてなブックマークに追加>img srchttps://b.st-hatena.com/images/entry-button/button-only.gif altこの記事をはてなブックマークに追加 width20 height20 styleborder: none; />/a> /div> div classsocial-button-item> div classfb-share-button data-layoutbox_count data-hrefhttps://smrmkt.hatenablog.jp/entry/2022/12/05/000000>/div> /div> div classsocial-button-item> a classentry-share-button entry-share-button-twitter test-share-button-twitter hrefhttps://x.com/intent/tweet?textAmazon+Athena+%E3%81%AE+Query+Result+Reuse+%E3%81%A7%E5%90%8C%E3%81%98%E3%82%AF%E3%82%A8%E3%83%AA%E3%81%AE%E7%B5%90%E6%9E%9C%E3%82%92%E9%AB%98%E9%80%9F%E3%81%AB%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B+-+About+connecting+the+dots.&urlhttps%3A%2F%2Fsmrmkt.hatenablog.jp%2Fentry%2F2022%2F12%2F05%2F000000 titleX(Twitter)で投稿する >/a> /div> div classsocial-button-item> a hrefhttp://www.tumblr.com/share data-hatenablog-tumblr-share-button data-share-urlhttps://smrmkt.hatenablog.jp/entry/2022/12/05/000000 data-share-titleAmazon Athena の Query Result Reuse で同じクエリの結果を高速に取得する - About connecting the dots. titleShare on Tumblr styledisplay:inline-block; text-indent:-9999px; overflow:hidden; width:81px; height:20px; background:url(https://platform.tumblr.com/v1/share_1.png) top left no-repeat transparent; vertical-align: top;>Share on Tumblr/a> /div> span> div classline-it-button styledisplay: none; data-typeshare-e data-langja >/div> script src//scdn.line-apps.com/n/line_it/thirdparty/loader.min.js asyncasync deferdefer >/script> /span> /div> div classgoogle-afc-image test-google-rectangle-ads> div idgoogle_afc_user_container_1 classgoogle-afc-user-container google_afc_blocklink2_5 google_afc_boder data-test-unit/4374287/blog_user>/div> a hrefhttp://blog.hatena.ne.jp/guide/pro classopen-pro-modal data-guide-pro-modal-ad-urlhttps://hatena.blog/guide/pro/modal/ad>広告を非表示にする/a> /div> div classcustomized-footer> /div> div classcomment-box js-comment-box> ul classcomment js-comment> li classread-more-comments styledisplay: none;>a>もっと読む/a>/li> /ul> a classleave-comment-title js-leave-comment-title>コメントを書く/a> /div> /footer> /div>/article> article classentry hentry test-hentry js-entry-article date-first autopagerize_page_element chars-3600 words-200 mode-hatena entry-even identry-4207112889929951849 data-keyword-campaign data-uuid4207112889929951849 data-publication-typeentry> div classentry-inner> header classentry-header> div classdate entry-date first> a hrefhttps://smrmkt.hatenablog.jp/archive/2022/10/23 relnofollow> time datetime2022-10-23T00:28:14Z title2022-10-23T00:28:14Z> span classdate-year>2022/span>span classhyphen>-/span>span classdate-month>10/span>span classhyphen>-/span>span classdate-day>23/span> /time> /a> /div> h1 classentry-title> a hrefhttps://smrmkt.hatenablog.jp/entry/2022/10/23/092814 classentry-title-link bookmark>echo dot から Fire TV で Radiko を再生する方法/a>/h1> /header> div classentry-content hatenablog-entry> p>少し変化球ですが,広義の技術ネタと考えてここに記します.合計 4 時間くらい四苦八苦してたので,レアだと思いますがもし参考になる人がいればということで.内容はタイトルの通りですが,図に示すと以下の通りです./p>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/S/SAM/20221023/20221023081950.png width1200 height317 loadinglazy title classhatena-fotolife itempropimage>/span>/p>p>要するに,echo dot にボイスコマンドを投げて,Fire TV の a classkeyword hrefhttp://d.hatena.ne.jp/keyword/Radiko>Radiko/a> を操作して,a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%B5%A5%A6%A5%F3%A5%C9>サウンド/a>バーから音を出したいということです./p>p>実際に達成した方法としては,ターゲットデa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%D0%A5%A4%A5%B9>バイス/a>を Fire TV として (1) Fire TV をオンにする,(2) 「アレクサ、ラジコでa classkeyword hrefhttp://d.hatena.ne.jp/keyword/nhk%20fm>nhk fm/a>」をまとめた Alexa の定型アクションを作成し,これを普段よく聞くラジオ放送局ぶんだけ作成する,です.br />br />/p>div classsection> h4 id背景>背景/h4> p>こんな面倒なことをせずに,直接 echo dot で a classkeyword hrefhttp://d.hatena.ne.jp/keyword/Radiko>Radiko/a> の音を出せばいいのではと思うかもしれませんが,echo dot の音がしょぼいので,もう少し良い音が出るa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%B5%A5%A6%A5%F3%A5%C9>サウンド/a>バーから鳴らしたかったというのが理由です.その場合,echo dot とa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%B5%A5%A6%A5%F3%A5%C9>サウンド/a>バーを a classkeyword hrefhttp://d.hatena.ne.jp/keyword/Bluetooth>Bluetooth/a> で直接繋ぐほうが直接的なやり方なんですが,自分の環境だとうまくいきませんでした.理由は (1) a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%B5%A5%A6%A5%F3%A5%C9>サウンド/a>バーの音声インプットは,基本 a classkeyword hrefhttp://d.hatena.ne.jp/keyword/HDMI>HDMI/a> でつないだテレビが優先される形になっており,入力を a classkeyword hrefhttp://d.hatena.ne.jp/keyword/Bluetooth>Bluetooth/a> に切り替えるためには,明示的にa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%B5%A5%A6%A5%F3%A5%C9>サウンド/a>バーのリモコン操作が必要になります.(2) かつ a classkeyword hrefhttp://d.hatena.ne.jp/keyword/HDMI>HDMI/a> と a classkeyword hrefhttp://d.hatena.ne.jp/keyword/Bluetooth>Bluetooth/a> でベース音量が大きく違っており,音量変更のリモコン操作も併せて必要なのもストレスでした.(3) さらにこれが一番致命的なのですが,a classkeyword hrefhttp://d.hatena.ne.jp/keyword/Bluetooth>Bluetooth/a> でa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%B5%A5%A6%A5%F3%A5%C9>サウンド/a>バーに繋いでいると,普段はテレビからの a classkeyword hrefhttp://d.hatena.ne.jp/keyword/HDMI>HDMI/a> を優先しているので,echo dot からの音声出力が基本聞こえないという点です.そのため通知の確認やタイマーのセットとかが一切使えなくなります.これらの理由から,直接接続は断念せざるを得ませんでした./p>p>そこで考えられるのが,(1) echo dot 自体を買い替えて,そもそも良い音質で聴けるようにする,もしくは (2) Fire TV を購入して,そちらをa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%B5%A5%A6%A5%F3%A5%C9>サウンド/a>バーにつないで a classkeyword hrefhttp://d.hatena.ne.jp/keyword/Radiko>Radiko/a> の音を鳴らす,です.前者は echo studio が思い浮かびますが.単品で 3 万近くしますし,この時点ですでにa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%B5%A5%A6%A5%F3%A5%C9>サウンド/a>バーを持っていた自分にとっては,魅力的な選択肢にはなりませんでした.そこで後者を選択しました.これなら Fire TV Stick で 3000 円ほどで済みますし,すぐに設定できるとたかを括っていました.しかし,これが思いのほか難儀でした./p>/div>div classsection> h4 idRadiko-再生が意外と難しい>a classkeyword hrefhttp://d.hatena.ne.jp/keyword/Radiko>Radiko/a> 再生が意外と難しい/h4> p>Fire TV で a classkeyword hrefhttp://d.hatena.ne.jp/keyword/Radiko>Radiko/a> を再生するには,大きく分けて 3 つのやり方があります.(1) Alexa の a classkeyword hrefhttp://d.hatena.ne.jp/keyword/Radiko>Radiko/a> スキルを使う,(2) Fire TV にある a classkeyword hrefhttp://d.hatena.ne.jp/keyword/Radiko>Radiko/a> アプリを使う,(3) Fire TV 上の Silk Browser などで a classkeyword hrefhttp://d.hatena.ne.jp/keyword/Radiko>Radiko/a> のデスクトップ版ウェブサイトを開いて再生する,です./p>p>(1) について,Alexa スキルでは,基本的にデa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%D0%A5%A4%A5%B9>バイス/a>単位での機能の有効化/無効化はできません.そのため echo dot に対して a classkeyword hrefhttp://d.hatena.ne.jp/keyword/Radiko>Radiko/a> の再生コマンドを投げると,基本的に echo dot 上で再生してしまいます.そこで明示的に「アレクサ、Fire tvでa classkeyword hrefhttp://d.hatena.ne.jp/keyword/radiko>radiko/a>のa classkeyword hrefhttp://d.hatena.ne.jp/keyword/nhk%20fm>nhk fm/a>を再生」といったコマンドをいろいろな言い方で投げてみましたが,うまく認識してもらえませんでした.結局うまく機能させるためには,Fire TV のリモコンで「アレクサ、a classkeyword hrefhttp://d.hatena.ne.jp/keyword/radiko>radiko/a>でa classkeyword hrefhttp://d.hatena.ne.jp/keyword/nhk%20fm>nhk fm/a>を再生」のようなコマンドを打つ必要があり,当初の目的からは遠ざかってしまいした./p>p>(2) については,Fire TV の a classkeyword hrefhttp://d.hatena.ne.jp/keyword/Radiko>Radiko/a> アプリがくせもので,自分には正直うまい使い方がよくわかりませんでした.そもそも立ち上げてもそのままでは再生されず,別途ボイスコマンドが必要となる仕様のようで,そのボイスコマンドも Fire TV のリモコンから実行する必要があるみたいです.echo dot から「アレクサ、Fire tvでa classkeyword hrefhttp://d.hatena.ne.jp/keyword/radiko>radiko/a>つけて」と実行すればアプリ自体は立ち上げてくれるものの,そこでラジオの再生はされないというなんとも意味のない状態になってしまいます./p>p>(3) について,こちらは特に問題なく動作しa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%BF%A5%A4%A5%E0%A5%B7%A5%D5%A5%C8>タイムシフト/a>再生まで可能なのですが,そもそもボイスコマンドだけで操作できず,リモコンでのカーソル移動操作が求められるため,手間が大きすぎて断念しました./p>p>ということで,正攻法ではにっちもさっちもいかない状況に陥ってしまいました.echo dot と Fire TV のリンクだったり,グループやスピーカーグループなど試してみたものの,特に状況は改善しませんでした.a classkeyword hrefhttp://d.hatena.ne.jp/keyword/Youtube>Youtube/a> とか Prime Video だと,echo dot から再生できないこともあってか,ボイスコマンドで echo dot から Fire TV 操作は問題なくできたんですけどね.../p>/div>div classsection> h4 id定型アクションというソリューション>定型アクションというソリューション/h4> p>上記の 3 つの案だと,(2) と (3) はどう転んでもボイスコマンド一発では実現できない仕様のように思われるため,(1) を軸に考えることになります.ここで (1) の課題を思い返してみると,a classkeyword hrefhttp://d.hatena.ne.jp/keyword/Radiko>Radiko/a> の再生コマンドを実行するデa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%D0%A5%A4%A5%B9>バイス/a>を強制的に指定できさえすれば問題が解決することがわかります.そこで出てくるのが定型アクションです.以下に具体的な設定例を示すのですが,一番下のところに「デa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%D0%A5%A4%A5%B9>バイス/a>」とあるように,コマンドを実行する対象のデa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%D0%A5%A4%A5%B9>バイス/a>を指定することができます.ということで,最終的にこれで問題解決となりました.ちなみに Firetarou というのが Fire TV のデa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%D0%A5%A4%A5%B9>バイス/a>名ですa href#f-3e4b041d namefn-3e4b041d titleこの名前のセンスについては触れないでください.>*1/a>.一点だけ問題があるとすると,一つのコマンドでは一つの放送局の再生しかできないので,よく聞く放送局分だけ登録しておく必要があることですが,まぁこれは最初ちょっと手間がかかるだけなので,特に問題はないと判断しました./p>p>span itemscope itemtypehttp://schema.org/Photograph>a hrefhttp://f.hatena.ne.jp/SAM/20221023090136 classhatena-fotolife itempropurl>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/S/SAM/20221023/20221023090136.png width554 height1200 loadinglazy title classhatena-fotolife stylewidth:360px itempropimage>/a>/span>br />/p>/div>div classsection> h4 idおまけ>おまけ/h4> p>ということで,ぶじやりたかったことが実現できたんですが,最後にもうひとつ欲をいえば達成したかったのが,画面をオフにした状態での a classkeyword hrefhttp://d.hatena.ne.jp/keyword/Radiko>Radiko/a> の再生です.Fire TV は基本的に TV と連動するデa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%D0%A5%A4%A5%B9>バイス/a>なので,上記の定型アクションを実行すると必然的にテレビの画面がついてしまいます.まぁこの構成を取ろうと思った時点でbr />これに関しては許容するつもりだったのですが,可能なら上記のオプションも持ちたいと考えました.こちらもいくつか検討した結果,テレビ側の a classkeyword hrefhttp://d.hatena.ne.jp/keyword/HDMI>HDMI/a> 連動設定で,テレビ → 連動機器電源オフを「連動しない」設定にすることで,定型アクション実行後にテレビリモコンからテレビ電源を切っても,a classkeyword hrefhttp://d.hatena.ne.jp/keyword/Radiko>Radiko/a> がそのまま再生し続ける状態を作り出すことができましたa href#f-80e0f730 namefn-80e0f730 title自分の使っている REGZA には画面表示オフ機能がないので,この手を取るしかなかったんですが,SHARP や SONY のテレビだと,画面表示オフ機能があるみたいなので,そちらの活用もできそうです.>*2/a>.まぁこれは結局リモコン操作が入るので,あまりスマートではないですが,長時間 a classkeyword hrefhttp://d.hatena.ne.jp/keyword/Radiko>Radiko/a> を聞きたいときにはまぁやってもいいかなくらいのオプションですa href#f-75ef514e namefn-75ef514e title本当は定型アクションに REGZA の電源オフも入れたかったのですが,定型アクションはカスタムコマンドが最後に来なければいけないという制約があるようで,含めることができませんでした...>*3/a>./p>p>あと少し離れた別の話として,個人的には操作リモコンの数を可能な限り増やしたくなかったので,上記のソリューションによって Fire TV / a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%B5%A5%A6%A5%F3%A5%C9>サウンド/a>バーのリモコンを基本的に使わずに済み,TV リモコンに統一できるようになったのが朗報でした./p>p>そんなわけで,たいしたことない Alexa まわりの試行錯誤でしたが,似たような記事が Web 上に見当たらなかったので,どこかの誰かに参考になることもあるかもしれないと思って書いておくことにしました./p>/div>div classfootnote>p classfootnote>a href#fn-3e4b041d namef-3e4b041d classfootnote-number>*1/a>span classfootnote-delimiter>:/span>span classfootnote-text>この名前のセンスについては触れないでください./span>/p>p classfootnote>a href#fn-80e0f730 namef-80e0f730 classfootnote-number>*2/a>span classfootnote-delimiter>:/span>span classfootnote-text>自分の使っている a classkeyword hrefhttp://d.hatena.ne.jp/keyword/REGZA>REGZA/a> には画面表示オフ機能がないので,この手を取るしかなかったんですが,a classkeyword hrefhttp://d.hatena.ne.jp/keyword/SHARP>SHARP/a> や a classkeyword hrefhttp://d.hatena.ne.jp/keyword/SONY>SONY/a> のテレビだと,画面表示オフ機能があるみたいなので,そちらの活用もできそうです./span>/p>p classfootnote>a href#fn-75ef514e namef-75ef514e classfootnote-number>*3/a>span classfootnote-delimiter>:/span>span classfootnote-text>本当は定型アクションに a classkeyword hrefhttp://d.hatena.ne.jp/keyword/REGZA>REGZA/a> の電源オフも入れたかったのですが,定型アクションはカスタムコマンドが最後に来なければいけないという制約があるようで,含めることができませんでした.../span>/p>/div> /div> footer classentry-footer> div classentry-tags-wrapper> div classentry-tags> /div>/div> p classentry-footer-section track-inview-by-gtm data-gtm-track-json{"area": "finish_reading"}> span classauthor vcard>span classfn data-load-nickname1 data-user-nameSAM >SAM/span>/span> span classentry-footer-time>a hrefhttps://smrmkt.hatenablog.jp/entry/2022/10/23/092814>time data-relative datetime2022-10-23T00:28:14Z title2022-10-23T00:28:14Z classupdated>2022-10-23 09:28/time>/a>/span> span class entry-footer-subscribe data-test-blog-controlls-subscribe> a hrefhttps://blog.hatena.ne.jp/SAM/smrmkt.hatenablog.jp/subscribe?utm_campaignsubscribe_blog&utm_sourceblogs_entry_footer&utm_mediumbutton> 読者になる /a> /span> /p> div classhatena-star-container data-hatena-star-container data-hatena-star-urlhttps://smrmkt.hatenablog.jp/entry/2022/10/23/092814 data-hatena-star-titleecho dot から Fire TV で Radiko を再生する方法 data-hatena-star-variantprofile-icon data-hatena-star-profile-url-templatehttps://blog.hatena.ne.jp/{username}/ >/div> div classsocial-buttons> div classsocial-button-item> a hrefhttps://b.hatena.ne.jp/entry/s/smrmkt.hatenablog.jp/entry/2022/10/23/092814 classhatena-bookmark-button data-hatena-bookmark-urlhttps://smrmkt.hatenablog.jp/entry/2022/10/23/092814 data-hatena-bookmark-layoutvertical-balloon data-hatena-bookmark-langja titleこの記事をはてなブックマークに追加>img srchttps://b.st-hatena.com/images/entry-button/button-only.gif altこの記事をはてなブックマークに追加 width20 height20 styleborder: none; />/a> /div> div classsocial-button-item> div classfb-share-button data-layoutbox_count data-hrefhttps://smrmkt.hatenablog.jp/entry/2022/10/23/092814>/div> /div> div classsocial-button-item> a classentry-share-button entry-share-button-twitter test-share-button-twitter hrefhttps://x.com/intent/tweet?textecho+dot+%E3%81%8B%E3%82%89+Fire+TV+%E3%81%A7+Radiko+%E3%82%92%E5%86%8D%E7%94%9F%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95+-+About+connecting+the+dots.&urlhttps%3A%2F%2Fsmrmkt.hatenablog.jp%2Fentry%2F2022%2F10%2F23%2F092814 titleX(Twitter)で投稿する >/a> /div> div classsocial-button-item> a hrefhttp://www.tumblr.com/share data-hatenablog-tumblr-share-button data-share-urlhttps://smrmkt.hatenablog.jp/entry/2022/10/23/092814 data-share-titleecho dot から Fire TV で Radiko を再生する方法 - About connecting the dots. titleShare on Tumblr styledisplay:inline-block; text-indent:-9999px; overflow:hidden; width:81px; height:20px; background:url(https://platform.tumblr.com/v1/share_1.png) top left no-repeat transparent; vertical-align: top;>Share on Tumblr/a> /div> span> div classline-it-button styledisplay: none; data-typeshare-e data-langja >/div> script src//scdn.line-apps.com/n/line_it/thirdparty/loader.min.js asyncasync deferdefer >/script> /span> /div> div classgoogle-afc-image test-google-rectangle-ads> div idgoogle_afc_user_container_2 classgoogle-afc-user-container google_afc_blocklink2_5 google_afc_boder data-test-unit/4374287/blog_user_2nd>/div> a hrefhttp://blog.hatena.ne.jp/guide/pro classopen-pro-modal data-guide-pro-modal-ad-urlhttps://hatena.blog/guide/pro/modal/ad>広告を非表示にする/a> /div> div classcustomized-footer> /div> div classcomment-box js-comment-box> ul classcomment js-comment> li classread-more-comments styledisplay: none;>a>もっと読む/a>/li> /ul> a classleave-comment-title js-leave-comment-title>コメントを書く/a> /div> /footer> /div>/article> article classentry hentry test-hentry js-entry-article date-first autopagerize_page_element chars-4000 words-200 mode-hatena entry-odd identry-13574176438037769581 data-keyword-campaign data-uuid13574176438037769581 data-publication-typeentry> div classentry-inner> header classentry-header> div classdate entry-date first> a hrefhttps://smrmkt.hatenablog.jp/archive/2021/12/03 relnofollow> time datetime2021-12-02T22:14:00Z title2021-12-02T22:14:00Z> span classdate-year>2021/span>span classhyphen>-/span>span classdate-month>12/span>span classhyphen>-/span>span classdate-day>03/span> /time> /a> /div> h1 classentry-title> a hrefhttps://smrmkt.hatenablog.jp/entry/2021/12/03/071400 classentry-title-link bookmark>Amazon QuickSight の 1-click 埋め込みダッシュボード機能を試してみた/a>/h1> /header> div classentry-content hatenablog-entry> p>この記事は a hrefhttps://qiita.com/advent-calendar/2021/aws-analytics>AWS Analytics Advent Calendar 2021/a> の 3 日目の記事になります.というか気がついたら 2 年半もの間,一本も記事を書かないままに時間が経ってしまっていたんですね.その間に世の中はコロナになって世界中大混乱だったりしているわけですし,個人的にもいろんなことがありましたa href#f-da23dc89 namefn-da23dc89 title異動したりロールが変わったり喘息になったり家を買ったり...それにしても最近の住宅相場の値上がりっぷりは本当にやばいですね.>*1/a>.とはいえ相変わらずデータ界隈の片隅でボチボチとやっております./p>p>iframe srchttps://hatenablog-parts.com/embed?urlhttps%3A%2F%2Fqiita.com%2Fadvent-calendar%2F2021%2Faws-analytics titleCalendar for AWS Analytics Advent Calendar 2021 | Advent Calendar 2021 - Qiita classembed-card embed-webcard scrollingno frameborder0 styledisplay: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;>/iframe>cite classhatena-citation>a hrefhttps://qiita.com/advent-calendar/2021/aws-analytics>qiita.com/a>/cite>/p>p>/p>div classsection> h3>a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%C0%A5%C3%A5%B7%A5%E5>ダッシュ/a>ボードの埋め込み/h3> p>さて,ここからが本題です.今回は珍しく BI の話a href#f-be4ad2b9 namefn-be4ad2b9 titleBI とはなんぞやって人は,https://www.tableau.com/ja-jp/learn/articles/business-intelligence:titleこちらのページによくまとまっているので,まずはご一読ください.>*2/a>.以前お仕事で Tableau Server/Desktop を触ってたことがあるんですが,使い勝手は良いものの,ライセンスの問題でなかなか社内に大規模展開するのが大変だったり,サーバ運用,特に定期的なソフトウェアのバージョンアップデートが結構大変だったことをよく覚えていますa href#f-092c517e namefn-092c517e titleまぁ Tableau Online とかの選択肢もありますが,それはそれで料金が高いんですよね...>*3/a>.気がついたら今はa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%AF%A5%E9%A5%A6%A5%C9>クラウド/a>全盛で,BI ツールも a classkeyword hrefhttp://d.hatena.ne.jp/keyword/SaaS>SaaS/a> とかサーバーレスのも増えてきており,この辺りがだいぶ楽になってきてるなぁと思う次第です.今回取り上げる a classkeyword hrefhttp://d.hatena.ne.jp/keyword/Amazon>Amazon/a> QuickSight もそんなサーバーレス型の BI サービスですね.BI って結構社内ポータルに埋め込んだり,BI 以外の他のデータとまとめて一箇所に表示したりとかって使い方すると思うんですが,その場合いわゆる埋め込み機能が必要になります.社内の各部署にお知らせをして,別のa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%C0%A5%C3%A5%B7%A5%E5>ダッシュ/a>ボードツールの使い方の説明をして,それをみてもらうというのは結構敷居が高かったりします.そんな場合には,既に使われているところにa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%C0%A5%C3%A5%B7%A5%E5>ダッシュ/a>ボードも集約したい,っていうのが結構よくある話ですよね.まぁあとは a classkeyword hrefhttp://d.hatena.ne.jp/keyword/SaaS>SaaS/a> とかやっている会社で,ユーザー向けにa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%C0%A5%C3%A5%B7%A5%E5>ダッシュ/a>ボード提供とかやる場合もあるかもしれないですa href#f-330a099a namefn-330a099a title自分はそのあたりを実務で扱った経験がないのでよくわかりません...>*4/a>./p>p>さて QuickSight にも以前から埋め込み機能があったんですが,a classkeyword hrefhttp://d.hatena.ne.jp/keyword/API>API/a> オペレーション前提で,コードをガッツリ書いて埋め込む元のページにデプロイしないといけなかったんですよね.埋め込みハンズオンが公開されているので,みていただければ分かりますが,a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%B3%A5%DE%A5%F3%A5%C9%A5%E9%A5%A4%A5%F3>コマンドライン/a>での作業が結構多くて,実際に試すまでの手順が長かったんですよね./p>p>iframe srchttps://hatenablog-parts.com/embed?urlhttp%3A%2F%2Fawsj-assets-qs.s3.ap-northeast-1.amazonaws.com%2Fworkshop%2Fpublic%2Fjp%2Findex.html titleAmazon QuickSight ハンズオン classembed-card embed-webcard scrollingno frameborder0 styledisplay: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;>/iframe>cite classhatena-citation>a hrefhttp://awsj-assets-qs.s3.ap-northeast-1.amazonaws.com/workshop/public/jp/index.html>awsj-assets-qs.s3.ap-northeast-1.amazonaws.com/a>/cite>/p>p>a hrefhttp://awsj-demodocs-mi.s3-website-ap-northeast-1.amazonaws.com/workshop/public/jp/03-workshop/05-embed-quicksight/01-setup-embedded-application.html>このページの一番下のフローチャート/a>とかみていただくとわかるんですが,アプリでa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%C0%A5%C3%A5%B7%A5%E5>ダッシュ/a>ボードを埋め込んだページを表示する際に,QS のユーザー認証や IAM ロールの権限取得,埋め込みa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%C0%A5%C3%A5%B7%A5%E5>ダッシュ/a>ボードの URL 取得,ってプロセスをやっているので,パッと実装するのは敷居が高いです./p>/div>div classsection> h3>1-click 埋め込み機能/h3> p>ここで最近出てきた 1-click 埋め込み機能a href#f-dfc165d5 namefn-dfc165d5 title以前からのも,この 1-clock のも両方,埋め込み機能は QuickSight の Enterprise Edition でのみ利用できる機能なので,その点ご注意ください.ただ Enterprise Edition だと,$5 キャップ付き従量課金の Reader ライセンスを利用できるので,組織内に大きく展開できるので普通に便利.>*5/a>なんですが,響きa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A4%AB%A4%E9%A4%B7>からし/a>て簡単にできそうな感じであふれてます.これみる限り,ほぼ a classkeyword hrefhttp://d.hatena.ne.jp/keyword/GUI>GUI/a> 作業だけで手軽にページ内埋め込みができそうなんで,実際に試してみましたよというのが今回の話./p>p>iframe srchttps://hatenablog-parts.com/embed?urlhttps%3A%2F%2Faws.amazon.com%2Fblogs%2Fbig-data%2Fembed-interactive-dashboards-in-your-apps-and-portals-in-minutes-with-amazon-quicksights-new-1-click-embedding-feature%2F titleEmbed interactive dashboards in your apps and portals in minutes with Amazon QuickSight’s new 1-click embedding feature | Amazon Web Services classembed-card embed-webcard scrollingno frameborder0 styledisplay: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;>/iframe>cite classhatena-citation>a hrefhttps://aws.amazon.com/blogs/big-data/embed-interactive-dashboards-in-your-apps-and-portals-in-minutes-with-amazon-quicksights-new-1-click-embedding-feature/>aws.amazon.com/a>/cite>/p>p>ということで,実際に試してみた内容を以下にまとめました./p>div classsection> h4>a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%C0%A5%C3%A5%B7%A5%E5>ダッシュ/a>ボードを共有して埋め込みコードを取得/h4> p>デーa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%BF%A5%BB%A5%C3%A5%C8>タセット/a>を読み込んでa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%C0%A5%C3%A5%B7%A5%E5>ダッシュ/a>ボードを作成するというのは,a classkeyword hrefhttp://d.hatena.ne.jp/keyword/AWS>AWS/a> のブログにまとまってるベーシックハンズオンとかやればわかるので,ここでは割愛./p>p>iframe srchttps://hatenablog-parts.com/embed?urlhttps%3A%2F%2Faws.amazon.com%2Fjp%2Fblogs%2Fnews%2Famazon-quicksight-handson-202006%2F titleBIサービス Amazon QuickSight のセルフハンズオンキットに「販売管理ダッシュボード編」が追加 | Amazon Web Services classembed-card embed-webcard scrollingno frameborder0 styledisplay: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;>/iframe>cite classhatena-citation>a hrefhttps://aws.amazon.com/jp/blogs/news/amazon-quicksight-handson-202006/>aws.amazon.com/a>/cite>/p>p>a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%C0%A5%C3%A5%B7%A5%E5>ダッシュ/a>ボードを作成したら,画面右上からa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%C0%A5%C3%A5%B7%A5%E5>ダッシュ/a>ボードの共有ボタンを押して,共有したい人の権限を追加したら OK です.別に自分しかみないんだったら,特に誰も追加しなくてもいいんですけどね./p>p>span itemscope itemtypehttp://schema.org/Photograph>a hrefhttp://f.hatena.ne.jp/SAM/20211130142458 classhatena-fotolife itempropurl>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/S/SAM/20211130/20211130142458.png altf:id:SAM:20211130142458p:image:w240 width672 height622 loadinglazy title classhatena-fotolife stylewidth:240px itempropimage>/a>/span>/p>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/S/SAM/20211130/20211130142455.png altf:id:SAM:20211130142455p:plain width1200 height660 loadinglazy title classhatena-fotolife itempropimage>/span>/p>p>上記の共有設定のページの上側に,埋め込み用コードを取得する「埋め込みコードをコピー」リンクがあるので,そちらを押すと iframe のコードがa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%AF%A5%EA%A5%C3%A5%D7%A5%DC%A1%BC%A5%C9>クリップボード/a>にコピーされます.内容はこんな感じ.以下の XXX... の部分は,12 桁の a classkeyword hrefhttp://d.hatena.ne.jp/keyword/AWS>AWS/a> アカウント ID と,YYY... のところは「7360487b-a372-4b15-bc5e-c327ac079825」みたいなa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%C0%A5%C3%A5%B7%A5%E5>ダッシュ/a>ボード ID(要はa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%C0%A5%C3%A5%B7%A5%E5>ダッシュ/a>ボードの URL の末尾のハッシュ文字列です)に置き換えてください./p>pre classcode lang-html data-langhtml data-unlink>span classsynIdentifier></span>span classsynStatement>iframe/span>span classsynIdentifier> /span>span classsynType>width/span>span classsynIdentifier>/span>span classsynConstant>"960"/span>span classsynIdentifier> /span>span classsynType>height/span>span classsynIdentifier>/span>span classsynConstant>"720"/span>span classsynIdentifier> /span>span classsynType>src/span>span classsynIdentifier>/span>span classsynConstant>"https://ap-northeast-1.quicksight.aws.amazon.com/sn/embed/share/accounts/XXXXXXXXXXXX/dashboards/YYYYYYYYYYYYYYYY"/span>span classsynIdentifier>>/span>span classsynIdentifier><//span>span classsynStatement>iframe/span>span classsynIdentifier>>/span>/pre>/div>div classsection> h4>許可a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%C9%A5%E1%A5%A4%A5%F3>ドメイン/a>を設定して実際に埋め込み/h4> p>埋め込みを実際にする前に,あともう一手間だけ必要で,許可a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%C9%A5%E1%A5%A4%A5%F3>ドメイン/a>の設定を行います.これ,実際に埋め込んだページのコードをみたら iframe の内容がコピペできてしまうので,明示的に埋め込みをアクセスしたa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%C9%A5%E1%A5%A4%A5%F3>ドメイン/a>以外からだとアクセスできないようになっています.そしてデフォルトではa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%C9%A5%E1%A5%A4%A5%F3>ドメイン/a>が登録されていない状態です.そのためこのブログのa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%C9%A5%E1%A5%A4%A5%F3>ドメイン/a>を,許可a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%C9%A5%E1%A5%A4%A5%F3>ドメイン/a>に追加します./p>p>まぁこれもa hrefhttps://aws.amazon.com/jp/about-aws/whats-new/2021/11/amazon-quicksight-launches-ip-based-access-restrictions-bring-you-own-role-account-setup/>最近実装されたアクセス元 IP アドレス制限機能/a>とか使えば,コードをコピペして会社の外に持ち出すとかしても,会社のネットワークの IP アドレス以外からアクセスしても表示されないような制限をかけられますし,また埋め込んだa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%C0%A5%C3%A5%B7%A5%E5>ダッシュ/a>ボードを開く際に認証のポップアップが開くので,SSO とかで社内ネットワークa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A4%AB%A4%E9%A4%B7>からし/a>かつなげないような IdP を設定しておけば,同様の制限はやはりできます.まぁ何重にも防御できるようにしましょうという話ですね.このあたりよくできてます./p>p>iframe srchttps://hatenablog-parts.com/embed?urlhttps%3A%2F%2Faws.amazon.com%2Fjp%2Fabout-aws%2Fwhats-new%2F2021%2F11%2Famazon-quicksight-launches-ip-based-access-restrictions-bring-you-own-role-account-setup%2F titleAmazon QuickSight が、IP ベースのアクセス制限とアカウント設定のための Bring-you-own-role を含む 4 つの新しい管理機能をリリース classembed-card embed-webcard scrollingno frameborder0 styledisplay: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;>/iframe>cite classhatena-citation>a hrefhttps://aws.amazon.com/jp/about-aws/whats-new/2021/11/amazon-quicksight-launches-ip-based-access-restrictions-bring-you-own-role-account-setup/>aws.amazon.com/a>/cite>/p>p>さて,実際にa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%C9%A5%E1%A5%A4%A5%F3>ドメイン/a>を登録するには,画面右上から「QuickSight の管理」を選択して.../p>p>span itemscope itemtypehttp://schema.org/Photograph>a hrefhttp://f.hatena.ne.jp/SAM/20211130144702 classhatena-fotolife itempropurl>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/S/SAM/20211130/20211130144702.png altf:id:SAM:20211130144702p:image:w180 width430 height788 loadinglazy title classhatena-fotolife stylewidth:180px itempropimage>/a>/span>/p>p>a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%C9%A5%E1%A5%A4%A5%F3>ドメイン/a>を追加します.ここでは,このブログのa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%C9%A5%E1%A5%A4%A5%F3>ドメイン/a>を追加しました.ここではやってませんが,ポート番号の指定とかまでできるみたいですね./p>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/S/SAM/20211130/20211130144932.png altf:id:SAM:20211130144932p:plain width1200 height542 loadinglazy title classhatena-fotolife itempropimage>/span>/p>p>以上です./p>/div>div classsection> h4>実際に埋め込みを表示してみる./h4> p>これで埋め込みの準備が完了したので,実際に画面を表示してみます.a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CA%A5%D6%A5%ED%A5%B0>はてなブログ/a>の場合は,ブログの編集画面に直接 iframe タグを貼るだけなので非常に簡単ですね.とはいえ自分のアカウントの内容をここにまるっと晒すのもアレなので,画像だけでご勘弁ください...いちおう適用イメージは以下の通りです.ログインしていない状態でページを開くと,以下のようにエラーが出て,ログインを促されます./p>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/S/SAM/20211130/20211130163754.png altf:id:SAM:20211130163754p:plain width1200 height1200 loadinglazy title classhatena-fotolife itempropimage>/span>/p>p>上記画像の「a classkeyword hrefhttp://d.hatena.ne.jp/keyword/sign>sign/a> in again」リンクをクリックすると,ログイン画面がポップアップで開くので,まずはアカウント名を入れて,QS のユーザー名と ID を入力してログインすれば,以下のようにちゃんと埋め込まれたa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%C0%A5%C3%A5%B7%A5%E5>ダッシュ/a>ボードが表示されます.今回は面倒なので ID/Pass でやっちゃいましたけど,SSO を設定しておけばもっとスムーズにログインできるはず.../p>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/S/SAM/20211130/20211130164105.png altf:id:SAM:20211130164105p:plain width1200 height1083 loadinglazy title classhatena-fotolife itempropimage>/span>/p>p>カレンダー選択ビューを表示できており,きちんとa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%BF%A5%E9%A5%AF%A5%C6%A5%A3%A5%D6>インタラクティブ/a>に動いていることがわかるかと思います.このa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%C0%A5%C3%A5%B7%A5%E5>ダッシュ/a>ボードは適当に作ったやつですけど,サンプルの売り上げデータを時系列で並べて,QS の機能で提供されている時系列予測を適用しています./p>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/S/SAM/20211130/20211130145810.png altf:id:SAM:20211130145810p:plain width1200 height752 loadinglazy title classhatena-fotolife itempropimage>/span>/p>p>ちなみに先ほどの許可a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%C9%A5%E1%A5%A4%A5%F3>ドメイン/a>を消してからもう一度アクセスすると,以下のように ap-northeast-1.quicksight.a classkeyword hrefhttp://d.hatena.ne.jp/keyword/aws>aws/a>.a classkeyword hrefhttp://d.hatena.ne.jp/keyword/amazon.com>amazon.com/a> refused to connect となっており,アクセスできないことが確認できるかと思います./p>p>span itemscope itemtypehttp://schema.org/Photograph>img srchttps://cdn-ak.f.st-hatena.com/images/fotolife/S/SAM/20211130/20211130150325.png altf:id:SAM:20211130150325p:plain width1200 height1058 loadinglazy title classhatena-fotolife itempropimage>/span>br />/p>/div>/div>div classsection> h3>既存の a classkeyword hrefhttp://d.hatena.ne.jp/keyword/API>API/a> ベースの埋め込み機能との比較/h3> p>最後に,既存の埋め込み機能との比較をしておしまいにしたいと思います.ざっくりまとめると以下の通りです./p>div classsection> h5>1-clock 埋め込み/h5> ul>li>とてもお手軽,10 分で埋め込みできる/li>li>a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%C0%A5%C3%A5%B7%A5%E5>ダッシュ/a>ボードの埋め込みにのみ対応,管理・分析系機能の埋め込みは今のところ対応していない/li>li>未ログインでアクセスした場合,ポップアップ経由で QS へのログインが必要/li>/ul>/div>div classsection> h5>従来の埋め込み/h5> ul>li>1-click と比べると覚えることが多い.a classkeyword hrefhttp://d.hatena.ne.jp/keyword/API>API/a> 周りの挙動とかコード記述も必要/li>li>a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%C0%A5%C3%A5%B7%A5%E5>ダッシュ/a>ボードを埋め込む以外に,管理・分析系機能部分の埋め込みにも対応している/li>li>ログイン処理をコード側で行うため,ユーザー側でのログイン処理は発生しない/li>/ul>p>現状だと 1-click の埋め込みは,既存の埋め込み機能を完全に置き換える形にはならないようなので,適材適所で使い分けする形になるでしょうか.ただ社内ポータルとかでのa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%C0%A5%C3%A5%B7%A5%E5>ダッシュ/a>ボード共有のケースであれば,ユーザーは社内 IdP の認証を済ませている状態でしょうし,1-click 埋め込みを使ったほうがはるかに楽に済むケースが多いように思います./p>/div>/div>div classfootnote>p classfootnote>a href#fn-da23dc89 namef-da23dc89 classfootnote-number>*1/a>span classfootnote-delimiter>:/span>span classfootnote-text>異動したりロールが変わったり喘息になったり家を買ったり...それにしても最近の住宅相場の値上がりっぷりは本当にやばいですね./span>/p>p classfootnote>a href#fn-be4ad2b9 namef-be4ad2b9 classfootnote-number>*2/a>span classfootnote-delimiter>:/span>span classfootnote-text>BI とはなんぞやって人は,a hrefhttps://www.tableau.com/ja-jp/learn/articles/business-intelligence>こちらのページ/a>によくまとまっているので,まずはご一読ください./span>/p>p classfootnote>a href#fn-092c517e namef-092c517e classfootnote-number>*3/a>span classfootnote-delimiter>:/span>span classfootnote-text>まぁ Tableau Online とかの選択肢もありますが,それはそれで料金が高いんですよね.../span>/p>p classfootnote>a href#fn-330a099a namef-330a099a classfootnote-number>*4/a>span classfootnote-delimiter>:/span>span classfootnote-text>自分はそのあたりを実務で扱った経験がないのでよくわかりません.../span>/p>p classfootnote>a href#fn-dfc165d5 namef-dfc165d5 classfootnote-number>*5/a>span classfootnote-delimiter>:/span>span classfootnote-text>以前からのも,この 1-clock のも両方,埋め込み機能は QuickSight の Enterprise Edition でのみ利用できる機能なので,その点ご注意ください.ただ Enterprise Edition だと,$5 キャップ付き従量課金の Reader ライセンスを利用できるので,組織内に大きく展開できるので普通に便利./span>/p>/div> /div> footer classentry-footer> div classentry-tags-wrapper> div classentry-tags> /div>/div> p classentry-footer-section track-inview-by-gtm data-gtm-track-json{"area": "finish_reading"}> span classauthor vcard>span classfn data-load-nickname1 data-user-nameSAM >SAM/span>/span> span classentry-footer-time>a hrefhttps://smrmkt.hatenablog.jp/entry/2021/12/03/071400>time data-relative datetime2021-12-02T22:14:00Z title2021-12-02T22:14:00Z classupdated>2021-12-03 07:14/time>/a>/span> span class entry-footer-subscribe data-test-blog-controlls-subscribe> a hrefhttps://blog.hatena.ne.jp/SAM/smrmkt.hatenablog.jp/subscribe?utm_campaignsubscribe_blog&utm_sourceblogs_entry_footer&utm_mediumbutton> 読者になる /a> /span> /p> div classhatena-star-container data-hatena-star-container data-hatena-star-urlhttps://smrmkt.hatenablog.jp/entry/2021/12/03/071400 data-hatena-star-titleAmazon QuickSight の 1-click 埋め込みダッシュボード機能を試してみた data-hatena-star-variantprofile-icon data-hatena-star-profile-url-templatehttps://blog.hatena.ne.jp/{username}/ >/div> div classsocial-buttons> div classsocial-button-item> a hrefhttps://b.hatena.ne.jp/entry/s/smrmkt.hatenablog.jp/entry/2021/12/03/071400 classhatena-bookmark-button data-hatena-bookmark-urlhttps://smrmkt.hatenablog.jp/entry/2021/12/03/071400 data-hatena-bookmark-layoutvertical-balloon data-hatena-bookmark-langja titleこの記事をはてなブックマークに追加>img srchttps://b.st-hatena.com/images/entry-button/button-only.gif altこの記事をはてなブックマークに追加 width20 height20 styleborder: none; />/a> /div> div classsocial-button-item> div classfb-share-button data-layoutbox_count data-hrefhttps://smrmkt.hatenablog.jp/entry/2021/12/03/071400>/div> /div> div classsocial-button-item> a classentry-share-button entry-share-button-twitter test-share-button-twitter hrefhttps://x.com/intent/tweet?textAmazon+QuickSight+%E3%81%AE+1-click+%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%83%80%E3%83%83%E3%82%B7%E3%83%A5%E3%83%9C%E3%83%BC%E3%83%89%E6%A9%9F%E8%83%BD%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F+-+About+connecting+the+dots.&urlhttps%3A%2F%2Fsmrmkt.hatenablog.jp%2Fentry%2F2021%2F12%2F03%2F071400 titleX(Twitter)で投稿する >/a> /div> div classsocial-button-item> a hrefhttp://www.tumblr.com/share data-hatenablog-tumblr-share-button data-share-urlhttps://smrmkt.hatenablog.jp/entry/2021/12/03/071400 data-share-titleAmazon QuickSight の 1-click 埋め込みダッシュボード機能を試してみた - About connecting the dots. titleShare on Tumblr styledisplay:inline-block; text-indent:-9999px; overflow:hidden; width:81px; height:20px; background:url(https://platform.tumblr.com/v1/share_1.png) top left no-repeat transparent; vertical-align: top;>Share on Tumblr/a> /div> span> div classline-it-button styledisplay: none; data-typeshare-e data-langja >/div> script src//scdn.line-apps.com/n/line_it/thirdparty/loader.min.js asyncasync deferdefer >/script> /span> /div> div classgoogle-afc-image test-google-rectangle-ads> div idgoogle_afc_user_container_3 classgoogle-afc-user-container google_afc_blocklink2_5 google_afc_boder data-test-unit/4374287/blog_user_2nd>/div> a hrefhttp://blog.hatena.ne.jp/guide/pro classopen-pro-modal data-guide-pro-modal-ad-urlhttps://hatena.blog/guide/pro/modal/ad>広告を非表示にする/a> /div> div classcustomized-footer> /div> div classcomment-box js-comment-box> ul classcomment js-comment> li classread-more-comments styledisplay: none;>a>もっと読む/a>/li> /ul> a classleave-comment-title js-leave-comment-title>コメントを書く/a> /div> /footer> /div>/article> article classentry hentry test-hentry js-entry-article date-first autopagerize_page_element chars-800 words-100 mode-hatena entry-even identry-17391345971645367791 data-keyword-campaign data-uuid17391345971645367791 data-publication-typeentry> div classentry-inner> header classentry-header> div classdate entry-date first> a hrefhttps://smrmkt.hatenablog.jp/archive/2018/05/17 relnofollow> time datetime2018-05-17T07:46:31Z title2018-05-17T07:46:31Z> span classdate-year>2018/span>span classhyphen>-/span>span classdate-month>05/span>span classhyphen>-/span>span classdate-day>17/span> /time> /a> /div> h1 classentry-title> a hrefhttps://smrmkt.hatenablog.jp/entry/2018/05/17/164631 classentry-title-link bookmark>SageMaker built-in algorithm の XGBoost で変数重要度を確認する/a>/h1> /header> div classentry-content hatenablog-entry> p>a classkeyword hrefhttp://d.hatena.ne.jp/keyword/AWS>AWS/a> のa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B3%D8%BD%AC>機械学習/a>サービス SageMaker にはビルトインa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%A2%A5%EB%A5%B4%A5%EA%A5%BA%A5%E0>アルゴリズム/a>がいくつも用意されていて,その中には定番の XGBoost も含まれています.XGBoost の定番のa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%E6%A1%BC%A5%B9%A5%B1%A1%BC%A5%B9>ユースケース/a>は,モデルを作って変数重要度を確認して,という流れだと思うんですが,ビルトインa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%A2%A5%EB%A5%B4%A5%EA%A5%BA%A5%E0>アルゴリズム/a>だとそのあたりの関数が提供されていません.a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%DB%A5%B9%A5%C6%A5%A3%A5%F3%A5%B0>ホスティング/a>はできるけど,逆にいうとa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%DB%A5%B9%A5%C6%A5%A3%A5%F3%A5%B0>ホスティング/a>しかできないわけです./p>p>作成済みモデルの変数重要度がみれないか確認したところ,なんのことはない,S3 に出力されるモデルファイルの tar.gz を回答して,pickle でロードしてあげれば普通にいけました.具体的なコードは以下のような感じです./p>pre classcode lang-sh data-langsh data-unlink>aws s3 cp s3://BUCKET_NAME/MODEL_PATH/model.tar.gztar zxvf model.tar.gz/pre>pre classcode lang-python data-langpython data-unlink>span classsynPreProc>import/span> xgboost span classsynStatement>as/span> xgbspan classsynPreProc>import/span> pickle span classsynStatement>as/span> pklspan classsynPreProc>import/span> matplotlib.pyplot span classsynStatement>as/span> plt plt.style.use(span classsynConstant>ggplot/span>) model pkl.load(span classsynIdentifier>open/span>(span classsynConstant>xgboost-model/span>,span classsynConstant>rb/span>))xgb.plot_importance(model)/pre>p>ちょっとした小ネタでした./p> /div> footer classentry-footer> div classentry-tags-wrapper> div classentry-tags> /div>/div> p classentry-footer-section track-inview-by-gtm data-gtm-track-json{"area": "finish_reading"}> span classauthor vcard>span classfn data-load-nickname1 data-user-nameSAM >SAM/span>/span> span classentry-footer-time>a hrefhttps://smrmkt.hatenablog.jp/entry/2018/05/17/164631>time data-relative datetime2018-05-17T07:46:31Z title2018-05-17T07:46:31Z classupdated>2018-05-17 16:46/time>/a>/span> span class entry-footer-subscribe data-test-blog-controlls-subscribe> a hrefhttps://blog.hatena.ne.jp/SAM/smrmkt.hatenablog.jp/subscribe?utm_campaignsubscribe_blog&utm_sourceblogs_entry_footer&utm_mediumbutton> 読者になる /a> /span> /p> div classhatena-star-container data-hatena-star-container data-hatena-star-urlhttps://smrmkt.hatenablog.jp/entry/2018/05/17/164631 data-hatena-star-titleSageMaker built-in algorithm の XGBoost で変数重要度を確認する data-hatena-star-variantprofile-icon data-hatena-star-profile-url-templatehttps://blog.hatena.ne.jp/{username}/ >/div> div classsocial-buttons> div classsocial-button-item> a hrefhttps://b.hatena.ne.jp/entry/s/smrmkt.hatenablog.jp/entry/2018/05/17/164631 classhatena-bookmark-button data-hatena-bookmark-urlhttps://smrmkt.hatenablog.jp/entry/2018/05/17/164631 data-hatena-bookmark-layoutvertical-balloon data-hatena-bookmark-langja titleこの記事をはてなブックマークに追加>img srchttps://b.st-hatena.com/images/entry-button/button-only.gif altこの記事をはてなブックマークに追加 width20 height20 styleborder: none; />/a> /div> div classsocial-button-item> div classfb-share-button data-layoutbox_count data-hrefhttps://smrmkt.hatenablog.jp/entry/2018/05/17/164631>/div> /div> div classsocial-button-item> a classentry-share-button entry-share-button-twitter test-share-button-twitter hrefhttps://x.com/intent/tweet?textSageMaker+built-in+algorithm+%E3%81%AE+XGBoost+%E3%81%A7%E5%A4%89%E6%95%B0%E9%87%8D%E8%A6%81%E5%BA%A6%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B+-+About+connecting+the+dots.&urlhttps%3A%2F%2Fsmrmkt.hatenablog.jp%2Fentry%2F2018%2F05%2F17%2F164631 titleX(Twitter)で投稿する >/a> /div> div classsocial-button-item> a hrefhttp://www.tumblr.com/share data-hatenablog-tumblr-share-button data-share-urlhttps://smrmkt.hatenablog.jp/entry/2018/05/17/164631 data-share-titleSageMaker built-in algorithm の XGBoost で変数重要度を確認する - About connecting the dots. titleShare on Tumblr styledisplay:inline-block; text-indent:-9999px; overflow:hidden; width:81px; height:20px; background:url(https://platform.tumblr.com/v1/share_1.png) top left no-repeat transparent; vertical-align: top;>Share on Tumblr/a> /div> span> div classline-it-button styledisplay: none; data-typeshare-e data-langja >/div> script src//scdn.line-apps.com/n/line_it/thirdparty/loader.min.js asyncasync deferdefer >/script> /span> /div> div classgoogle-afc-image test-google-rectangle-ads> script> (valve window.valve || ).push(function(v) { v.displayDFPSlot(google_afc_user_container_4); }); /script> div idgoogle_afc_user_container_4 classgoogle-afc-user-container google_afc_blocklink2_5 google_afc_boder data-test-unit/4374287/blog_user_2nd>/div> a hrefhttp://blog.hatena.ne.jp/guide/pro classopen-pro-modal data-guide-pro-modal-ad-urlhttps://hatena.blog/guide/pro/modal/ad>広告を非表示にする/a> /div> div classcustomized-footer> /div> div classcomment-box js-comment-box> ul classcomment js-comment> li classread-more-comments styledisplay: none;>a>もっと読む/a>/li> /ul> a classleave-comment-title js-leave-comment-title>コメントを書く/a> /div> /footer> /div>/article> article classentry hentry test-hentry js-entry-article date-first autopagerize_page_element chars-3200 words-100 mode-hatena entry-odd identry-17391345971615390101 data-keyword-campaign data-uuid17391345971615390101 data-publication-typeentry> div classentry-inner> header classentry-header> div classdate entry-date first> a hrefhttps://smrmkt.hatenablog.jp/archive/2018/02/11 relnofollow> time datetime2018-02-11T06:33:35Z title2018-02-11T06:33:35Z> span classdate-year>2018/span>span classhyphen>-/span>span classdate-month>02/span>span classhyphen>-/span>span classdate-day>11/span> /time> /a> /div> h1 classentry-title> a hrefhttps://smrmkt.hatenablog.jp/entry/2018/02/11/153335 classentry-title-link bookmark>書評: 人工知能システムのプロジェクトがわかる本/a>/h1> /header> div classentry-content hatenablog-entry> p>もうすっかり四半期に一回しかブログを書かないような感じになってますが,変わらずデータ分析業界の片隅で細々と生きております.さて,今回は著者の方より献本をいただいたので,書評を書きたいと思いますa href#f-ef0445ac namefn-ef0445ac titleこの場を借りて厚く御礼申し上げます.>*1/a>./p>p>div classhatena-asin-detail>a hrefhttp://www.amazon.co.jp/exec/obidos/ASIN/4798154059/sowhat0e8-22/>img srchttps://images-fe.ssl-images-amazon.com/images/I/51R7Kj4cMDL._SL160_.jpg classhatena-asin-detail-image alt人工知能システムのプロジェクトがわかる本 企画・開発から運用・保守まで title人工知能システムのプロジェクトがわかる本 企画・開発から運用・保守まで>/a>div classhatena-asin-detail-info>p classhatena-asin-detail-title>a hrefhttp://www.amazon.co.jp/exec/obidos/ASIN/4798154059/sowhat0e8-22/>人工知能システムのプロジェクトがわかる本 企画・開発から運用・保守まで/a>/p>ul>li>span classhatena-asin-detail-label>作者:/span> 本橋洋介/li>li>span classhatena-asin-detail-label>出版社/メーカー:/span> a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%E6%C6%B1%CB%BC%D2>翔泳社/a>/li>li>span classhatena-asin-detail-label>発売日:/span> 2018/02/15/li>li>span classhatena-asin-detail-label>メディア:/span> 単行本/li>li>a hrefhttp://d.hatena.ne.jp/asin/4798154059/sowhat0e8-22 target_blank>この商品を含むブログ (2件) を見る/a>/li>/ul>/div>div classhatena-asin-detail-foot>/div>/div>/p>p>この手のa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B3%D8%BD%AC>機械学習/a>a href#f-ee3ba0a9 namefn-ee3ba0a9 title個人的なスタンスとして,人工知能という言葉をできるだけ使いたくないので,本のタイトル等を除いては,このエントリでも機械学習で統一しています.>*2/a>そのものではなく,そのプロセスやシステムに焦点を当てた本はこれまでもありました.従来書だと,a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B3%D8%BD%AC>機械学習/a>システムを内製するエンジニア向け,a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B3%D8%BD%AC>機械学習/a>システムを発注する側向けがありますね.そしてついに,a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B3%D8%BD%AC>機械学習/a>システムを受託で開発する側の本が出てきたので,これで足りないピースがそろった感があります (w いずれの本もa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B3%D8%BD%AC>機械学習/a>という事象を正しく捉えていると思うんですが,視点を変えるとこうも内容が変わるもんだなぁと興味深く思います./p>p>div classhatena-asin-detail>a hrefhttp://www.amazon.co.jp/exec/obidos/ASIN/4873118255/sowhat0e8-22/>img srchttps://images-fe.ssl-images-amazon.com/images/I/51FAFJYvbsL._SL160_.jpg classhatena-asin-detail-image alt仕事ではじめる機械学習 title仕事ではじめる機械学習>/a>div classhatena-asin-detail-info>p classhatena-asin-detail-title>a hrefhttp://www.amazon.co.jp/exec/obidos/ASIN/4873118255/sowhat0e8-22/>仕事ではじめる機械学習/a>/p>ul>li>span classhatena-asin-detail-label>作者:/span> 有賀康顕,中山心太,西林孝/li>li>span classhatena-asin-detail-label>出版社/メーカー:/span> a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%AA%A5%E9%A5%A4%A5%EA%A1%BC%A5%B8%A5%E3%A5%D1%A5%F3>オライリージャパン/a>/li>li>span classhatena-asin-detail-label>発売日:/span> 2018/01/16/li>li>span classhatena-asin-detail-label>メディア:/span> 単行本(ソフトカバー)/li>li>a hrefhttp://d.hatena.ne.jp/asin/4873118255/sowhat0e8-22 target_blank>この商品を含むブログ (4件) を見る/a>/li>/ul>/div>div classhatena-asin-detail-foot>/div>/div>/p>p>div classhatena-asin-detail>a hrefhttp://www.amazon.co.jp/exec/obidos/ASIN/4863542194/sowhat0e8-22/>img srchttps://images-fe.ssl-images-amazon.com/images/I/5152M6r%2BWQL._SL160_.jpg classhatena-asin-detail-image alt人工知能システムを外注する前に読む本~ディープラーニングビジネスのすべて~ title人工知能システムを外注する前に読む本~ディープラーニングビジネスのすべて~>/a>div classhatena-asin-detail-info>p classhatena-asin-detail-title>a hrefhttp://www.amazon.co.jp/exec/obidos/ASIN/4863542194/sowhat0e8-22/>人工知能システムを外注する前に読む本~ディープラーニングビジネスのすべて~/a>/p>ul>li>span classhatena-asin-detail-label>作者:/span> 坂本俊之/li>li>span classhatena-asin-detail-label>出版社/メーカー:/span> シーアンドアール研究所/li>li>span classhatena-asin-detail-label>発売日:/span> 2017/05/24/li>li>span classhatena-asin-detail-label>メディア:/span> 単行本(ソフトカバー)/li>li>a hrefhttp://d.hatena.ne.jp/asin/4863542194/sowhat0e8-22 target_blank>この商品を含むブログを見る/a>/li>/ul>/div>div classhatena-asin-detail-foot>/div>/div>/p>div classsection> h3>この本を読んで得られるもの/h3> p>b>いわゆる a classkeyword hrefhttp://d.hatena.ne.jp/keyword/SIer>SIer/a> の人が,a classkeyword hrefhttp://d.hatena.ne.jp/keyword/RFC>RFC/a>・要件定義・PoC・開発・および保守運用といった通常のa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%B7%A5%B9%A5%C6%A5%E0%B3%AB%C8%AF>システム開発/a>のa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%D5%A5%EC%A1%BC%A5%E0%A5%EF%A1%BC%A5%AF>フレームワーク/a>にのっとった形で,a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B3%D8%BD%AC>機械学習/a>システムの作り方(や既存のシステムとの違い)を理解することができる/b>/p>p>この本のスタンスは非常に明確で,a classkeyword hrefhttp://d.hatena.ne.jp/keyword/SIer>SIer/a> に勤務しており,これからa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B3%D8%BD%AC>機械学習/a>システムの提案・受託を行おうとしている(もしくはすでに行なっている)人です.本編の流れはほぼひとつのa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%B1%A1%BC%A5%B9%A5%B9%A5%BF%A5%C7%A5%A3>ケーススタディ/a>に沿っており,その中で実際に考慮すべき点,通常のシステムとの違いについてわかりやすく説明がなされています.a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B3%D8%BD%AC>機械学習/a>システムは他のシステムと比べて,要件定義の難しさや手戻りの可能性,また保守運用の中での継続的なモデル改善の必要性といった点で,多くの不確実性を孕んでいます.そのため,こうした点に特別の注意を払って a classkeyword hrefhttp://d.hatena.ne.jp/keyword/RFP>RFP/a> は作られる必要があり,またそれに応じた提案を行う必要があります.私の個人的な経験でも,このあたりの難しさをわかりやすく説明しているものはなく,その点非常に多くの人に有益なように思います./p>div classsection> h4>個人的にためになった点/h4> p>私自身はいわゆる a classkeyword hrefhttp://d.hatena.ne.jp/keyword/SIer>SIer/a> に勤めた経験はなく,このようにカッチリしたシステム受託のプロセス周りの知見がそれほどありません.なので,a classkeyword hrefhttp://d.hatena.ne.jp/keyword/SIer>SIer/a> 的なプロセスを,a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B3%D8%BD%AC>機械学習/a>システムという自分に馴染みのあるものを通して体感的に理解できたことはなかなか良いものでした./p>p>また,個人的にクリーンヒットだったのは,「a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%BF%CD%B9%A9%C3%CE%C7%BD>人工知能/a>に期待しすぎる人に対する返し方」というコラムです.ちょっと長いですが引用すると,/p> blockquote> p>人口知能に過度な期待を抱いている人と一緒にシステムの目的を協議する際には,彼らの意識を変えなければなりません...(中略)...利用者 「これくらいの精度はうちの○○さんでもできそうだ」→「入社直後の人が○○さんくらいの業務ができるようになるのはすばらしいことですよね...(中略)...利用者「検知したい不正の70%しか検知できてないじゃないか」→「人が検知したときには,これ以上の漏れがあると聞いていますので,人によるチェックも併せてやると,人の手間も減らしながら精度が上がりそうですよね」/p> /blockquote>p>私もいままでa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B3%D8%BD%AC>機械学習/a>に詳しくない人とお話をする中で,どのように相手側の期待値を正しいところに落ち着かせ,目線を揃えていくかというところに結構神経を使うことがありますa href#f-8043129e namefn-8043129e titleこうした方の中には,精度100%でないならお前らのものは使わん! といったことをおっしゃる方もいらっしゃいました.まぁ機械学習をご存知の方ならお分かりの通り,精度 100% が達成できるなら,それははじめからルールベースで記述でき,機械学習をそもそも使う必要がないわけです...>*3/a>.こうした点も含めて,実体験からきている(であろう)こうした記述が,非常に参考になります.ネット上に溢れている言説の大半は,a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B3%D8%BD%AC>機械学習/a>のエキスパート(大体の場合研究者か内製企業のエンジニアやデータサーエンティスト)か,a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B3%D8%BD%AC>機械学習/a>ブームを煽るメディa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%A2%A5%B5%A5%A4>アサイ/a>ドa href#f-0dae08ac namefn-0dae08ac titleここには,実のところ SIer のセールストークも多分に含まれます.もちろん商売なのでそういう行為は仕方がないわけですが,過度に期待を煽っても,実際に案件を受けるときに苦労するのは現場の人たちなのになぁ,と思うことはよくあります.>*4/a>の言説で,このように地に足のついた言説をみる機会はほぼないように思います./p>p>あと,業務システムに組み込むときの運用含めた注意点として,a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B3%D8%BD%AC>機械学習/a>に詳しくない担当者が予測値をどう業務に生かすかを考えてシステムの設計がなされている点がとても興味深いです.新商品に対する想定や,異常値が出ることも想定して,予測値を人間がチェックしてから発注するといったプロセスのように,実際的な Tips が良いです./p>/div>div classsection> h4>その他/h4> p>巻末に PFR および提案書,PoC のドキュメントや結果報告書等含まれており,こうしたものは実業務に携わる人向けでよいなーと,他人事ながら思います.あとはa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B3%D8%BD%AC>機械学習/a>の詳細を捨てて,システム屋がa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B3%D8%BD%AC>機械学習/a>システムについて知る,というスタンスに特化したのは良い判断だよなーという感じです.そういう本は山ほどありますし,今更そういうのはいらないと思うので./p>p>ただ細かいところでいくつか気になるところもあって,例えば参考書籍が初級本と中・上級本に極端に別れているところは,なんでこんな風になったんだろうという感がします(プロジェクトマネジメントに関する本で,a classkeyword hrefhttp://d.hatena.ne.jp/keyword/PMBOK>PMBOK/a> ガイドと「マンガでわかるプロジェクトマネジメント」しかないとか).あとa classkeyword hrefhttp://d.hatena.ne.jp/keyword/Hadoop>Hadoop/a> に関する脚注が「Apach Spark のこと(a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%B8%B6%CA%B8%A5%DE%A5%DE>原文ママ/a>)」になっているのは,普通におかしいので修正いただけることを望みますa href#f-ee507ab7 namefn-ee507ab7 titleApach ではなく Apache だし,Hadoop は Spark とは全く別の技術です.>*5/a>.また細かい点だと,a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B3%D8%BD%AC>機械学習/a>に関する用語はできるだけ平易な言葉遣いをされているんですが,後半にいきなり汎化性能という言葉が説明なく出てきたり,ローパス・ハイパスフィルタが説明なく使われていたりa href#f-1e01f42e namefn-1e01f42e titleどちらも一般的なシステムエンジニアが知っているわけではないように思います.>*6/a>,細かいところでは気になる点があるのですが,こちらも修正されると良いなと思っています./p>/div>/div>div classfootnote>p classfootnote>a href#fn-ef0445ac namef-ef0445ac classfootnote-number>*1/a>span classfootnote-delimiter>:/span>span classfootnote-text>この場を借りて厚く御礼申し上げます./span>/p>p classfootnote>a href#fn-ee3ba0a9 namef-ee3ba0a9 classfootnote-number>*2/a>span classfootnote-delimiter>:/span>span classfootnote-text>個人的なスタンスとして,a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%BF%CD%B9%A9%C3%CE%C7%BD>人工知能/a>という言葉をできるだけ使いたくないので,本のタイトル等を除いては,このエントリでもa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B3%D8%BD%AC>機械学習/a>で統一しています./span>/p>p classfootnote>a href#fn-8043129e namef-8043129e classfootnote-number>*3/a>span classfootnote-delimiter>:/span>span classfootnote-text>こうした方の中には,精度100%でないならお前らのものは使わん! といったことをおっしゃる方もいらっしゃいました.まぁa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B3%D8%BD%AC>機械学習/a>をご存知の方ならお分かりの通り,精度 100% が達成できるなら,それははじめからルールベースで記述でき,a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%B5%A1%B3%A3%B3%D8%BD%AC>機械学習/a>をそもそも使う必要がないわけです.../span>/p>p classfootnote>a href#fn-0dae08ac namef-0dae08ac classfootnote-number>*4/a>span classfootnote-delimiter>:/span>span classfootnote-text>ここには,実のところ a classkeyword hrefhttp://d.hatena.ne.jp/keyword/SIer>SIer/a> のセールスa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%C8%A1%BC%A5%AF>トーク/a>も多分に含まれます.もちろん商売なのでそういう行為は仕方がないわけですが,過度に期待を煽っても,実際に案件を受けるときに苦労するのは現場の人たちなのになぁ,と思うことはよくあります./span>/p>p classfootnote>a href#fn-ee507ab7 namef-ee507ab7 classfootnote-number>*5/a>span classfootnote-delimiter>:/span>span classfootnote-text>Apach ではなく a classkeyword hrefhttp://d.hatena.ne.jp/keyword/Apache>Apache/a> だし,a classkeyword hrefhttp://d.hatena.ne.jp/keyword/Hadoop>Hadoop/a> は Spark とは全く別の技術です./span>/p>p classfootnote>a href#fn-1e01f42e namef-1e01f42e classfootnote-number>*6/a>span classfootnote-delimiter>:/span>span classfootnote-text>どちらも一般的なa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%B7%A5%B9%A5%C6%A5%E0%A5%A8%A5%F3%A5%B8%A5%CB%A5%A2>システムエンジニア/a>が知っているわけではないように思います./span>/p>/div> /div> footer classentry-footer> div classentry-tags-wrapper> div classentry-tags> /div>/div> p classentry-footer-section track-inview-by-gtm data-gtm-track-json{"area": "finish_reading"}> span classauthor vcard>span classfn data-load-nickname1 data-user-nameSAM >SAM/span>/span> span classentry-footer-time>a hrefhttps://smrmkt.hatenablog.jp/entry/2018/02/11/153335>time data-relative datetime2018-02-11T06:33:35Z title2018-02-11T06:33:35Z classupdated>2018-02-11 15:33/time>/a>/span> span class entry-footer-subscribe data-test-blog-controlls-subscribe> a hrefhttps://blog.hatena.ne.jp/SAM/smrmkt.hatenablog.jp/subscribe?utm_campaignsubscribe_blog&utm_sourceblogs_entry_footer&utm_mediumbutton> 読者になる /a> /span> /p> div classhatena-star-container data-hatena-star-container data-hatena-star-urlhttps://smrmkt.hatenablog.jp/entry/2018/02/11/153335 data-hatena-star-title書評: 人工知能システムのプロジェクトがわかる本 data-hatena-star-variantprofile-icon data-hatena-star-profile-url-templatehttps://blog.hatena.ne.jp/{username}/ >/div> div classsocial-buttons> div classsocial-button-item> a hrefhttps://b.hatena.ne.jp/entry/s/smrmkt.hatenablog.jp/entry/2018/02/11/153335 classhatena-bookmark-button data-hatena-bookmark-urlhttps://smrmkt.hatenablog.jp/entry/2018/02/11/153335 data-hatena-bookmark-layoutvertical-balloon data-hatena-bookmark-langja titleこの記事をはてなブックマークに追加>img srchttps://b.st-hatena.com/images/entry-button/button-only.gif altこの記事をはてなブックマークに追加 width20 height20 styleborder: none; />/a> /div> div classsocial-button-item> div classfb-share-button data-layoutbox_count data-hrefhttps://smrmkt.hatenablog.jp/entry/2018/02/11/153335>/div> /div> div classsocial-button-item> a classentry-share-button entry-share-button-twitter test-share-button-twitter hrefhttps://x.com/intent/tweet?text%E6%9B%B8%E8%A9%95%3A+%E4%BA%BA%E5%B7%A5%E7%9F%A5%E8%83%BD%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%8C%E3%82%8F%E3%81%8B%E3%82%8B%E6%9C%AC+-+About+connecting+the+dots.&urlhttps%3A%2F%2Fsmrmkt.hatenablog.jp%2Fentry%2F2018%2F02%2F11%2F153335 titleX(Twitter)で投稿する >/a> /div> div classsocial-button-item> a hrefhttp://www.tumblr.com/share data-hatenablog-tumblr-share-button data-share-urlhttps://smrmkt.hatenablog.jp/entry/2018/02/11/153335 data-share-title書評: 人工知能システムのプロジェクトがわかる本 - About connecting the dots. titleShare on Tumblr styledisplay:inline-block; text-indent:-9999px; overflow:hidden; width:81px; height:20px; background:url(https://platform.tumblr.com/v1/share_1.png) top left no-repeat transparent; vertical-align: top;>Share on Tumblr/a> /div> span> div classline-it-button styledisplay: none; data-typeshare-e data-langja >/div> script src//scdn.line-apps.com/n/line_it/thirdparty/loader.min.js asyncasync deferdefer >/script> /span> /div> div classgoogle-afc-image test-google-rectangle-ads> script> (valve window.valve || ).push(function(v) { v.displayDFPSlot(google_afc_user_container_5); }); /script> div idgoogle_afc_user_container_5 classgoogle-afc-user-container google_afc_blocklink2_5 google_afc_boder data-test-unit/4374287/blog_user_2nd>/div> a hrefhttp://blog.hatena.ne.jp/guide/pro classopen-pro-modal data-guide-pro-modal-ad-urlhttps://hatena.blog/guide/pro/modal/ad>広告を非表示にする/a> /div> div classcustomized-footer> /div> div classcomment-box js-comment-box> ul classcomment js-comment> li classread-more-comments styledisplay: none;>a>もっと読む/a>/li> /ul> a classleave-comment-title js-leave-comment-title>コメントを書く/a> /div> /footer> /div>/article> article classentry hentry test-hentry js-entry-article date-first autopagerize_page_element chars-800 words-100 mode-hatena entry-even identry-8599973812311146857 data-keyword-campaign data-uuid8599973812311146857 data-publication-typeentry> div classentry-inner> header classentry-header> div classdate entry-date first> a hrefhttps://smrmkt.hatenablog.jp/archive/2017/10/25 relnofollow> time datetime2017-10-25T02:19:34Z title2017-10-25T02:19:34Z> span classdate-year>2017/span>span classhyphen>-/span>span classdate-month>10/span>span classhyphen>-/span>span classdate-day>25/span> /time> /a> /div> h1 classentry-title> a hrefhttps://smrmkt.hatenablog.jp/entry/2017/10/25/111934 classentry-title-link bookmark>livy に接続するために Sparkmagic をインストール際にハマったところ/a>/h1> /header> div classentry-content hatenablog-entry> p>久しぶりに書きますが,すごい小ネタ.EMR 5.9.0 で livy0.4.0 がサポートされたので,ちょっと試してみようかなと思ったわけです.EMR のよくある問題は,Step 経由でジョブを投げると,ジョブを並列実行できないところで,この解消のために a classkeyword hrefhttp://d.hatena.ne.jp/keyword/ssh>ssh/a> でログインしてコマンド実行するとか,そんな感じのやり方をとる必要がありました.ここに livy があれば,REST でジョブを投げられるので,いろいろ捗るかな,というのが背景にあります./p>p>そんなわけで,chezou さんの記事を参考に sparkmagic を入れて試してみました./p>p>iframe srchttps://hatenablog-parts.com/embed?urlhttp%3A%2F%2Fchezou.hatenablog.com%2Fentry%2F2016%2F07%2F12%2F115000 titleJupyterからSpark clusterを操作できるlivy + sparkmagicを試してみた - once upon a time, classembed-card embed-blogcard scrollingno frameborder0 styledisplay: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;>/iframe>cite classhatena-citation>a hrefhttp://chezou.hatenablog.com/entry/2016/07/12/115000>chezou.hatenablog.com/a>/cite>/p>p>そうしたら pykerberos のインストールでこけて,??? となったんですが,結果的には以下の issue で挙げられている,libkrb5-dev を先にインストールすることで,無事に sparkmagic が入りましたよ,というお話./p>p>iframe srchttps://hatenablog-parts.com/embed?urlhttps%3A%2F%2Fgithub.com%2Frvagg%2Fnode-libssh%2Fissues%2F48 titlemissing gssapi/gssapi.h · Issue #48 · rvagg/node-libssh classembed-card embed-webcard scrollingno frameborder0 styledisplay: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;>/iframe>cite classhatena-citation>a hrefhttps://github.com/rvagg/node-libssh/issues/48>github.com/a>/cite>/p>p>使ってみると,a hrefhttps://livy.incubator.apache.org/docs/latest/rest-api.html>REST API/a> も非常にシンプルで使いやすそう.Jupyter からも接続できていい感じです.ただ現在のところ,sparkmagic から EMR a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%AF%A5%E9%A5%B9%A5%BF>クラスタ/a>の Hive Metastore につながらくて,なんでなのかがよくわかってないです.多分自分の設定が何か間違ってるんでしょうけど... 接続できると,Glue Data Catalog とも連携できていい感じなのに./p> /div> footer classentry-footer> div classentry-tags-wrapper> div classentry-tags> /div>/div> p classentry-footer-section track-inview-by-gtm data-gtm-track-json{"area": "finish_reading"}> span classauthor vcard>span classfn data-load-nickname1 data-user-nameSAM >SAM/span>/span> span classentry-footer-time>a hrefhttps://smrmkt.hatenablog.jp/entry/2017/10/25/111934>time data-relative datetime2017-10-25T02:19:34Z title2017-10-25T02:19:34Z classupdated>2017-10-25 11:19/time>/a>/span> span class entry-footer-subscribe data-test-blog-controlls-subscribe> a hrefhttps://blog.hatena.ne.jp/SAM/smrmkt.hatenablog.jp/subscribe?utm_campaignsubscribe_blog&utm_sourceblogs_entry_footer&utm_mediumbutton> 読者になる /a> /span> /p> div classhatena-star-container data-hatena-star-container data-hatena-star-urlhttps://smrmkt.hatenablog.jp/entry/2017/10/25/111934 data-hatena-star-titlelivy に接続するために Sparkmagic をインストール際にハマったところ data-hatena-star-variantprofile-icon data-hatena-star-profile-url-templatehttps://blog.hatena.ne.jp/{username}/ >/div> div classsocial-buttons> div classsocial-button-item> a hrefhttps://b.hatena.ne.jp/entry/s/smrmkt.hatenablog.jp/entry/2017/10/25/111934 classhatena-bookmark-button data-hatena-bookmark-urlhttps://smrmkt.hatenablog.jp/entry/2017/10/25/111934 data-hatena-bookmark-layoutvertical-balloon data-hatena-bookmark-langja titleこの記事をはてなブックマークに追加>img srchttps://b.st-hatena.com/images/entry-button/button-only.gif altこの記事をはてなブックマークに追加 width20 height20 styleborder: none; />/a> /div> div classsocial-button-item> div classfb-share-button data-layoutbox_count data-hrefhttps://smrmkt.hatenablog.jp/entry/2017/10/25/111934>/div> /div> div classsocial-button-item> a classentry-share-button entry-share-button-twitter test-share-button-twitter hrefhttps://x.com/intent/tweet?textlivy+%E3%81%AB%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB+Sparkmagic+%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E9%9A%9B%E3%81%AB%E3%83%8F%E3%83%9E%E3%81%A3%E3%81%9F%E3%81%A8%E3%81%93%E3%82%8D+-+About+connecting+the+dots.&urlhttps%3A%2F%2Fsmrmkt.hatenablog.jp%2Fentry%2F2017%2F10%2F25%2F111934 titleX(Twitter)で投稿する >/a> /div> div classsocial-button-item> a hrefhttp://www.tumblr.com/share data-hatenablog-tumblr-share-button data-share-urlhttps://smrmkt.hatenablog.jp/entry/2017/10/25/111934 data-share-titlelivy に接続するために Sparkmagic をインストール際にハマったところ - About connecting the dots. titleShare on Tumblr styledisplay:inline-block; text-indent:-9999px; overflow:hidden; width:81px; height:20px; background:url(https://platform.tumblr.com/v1/share_1.png) top left no-repeat transparent; vertical-align: top;>Share on Tumblr/a> /div> span> div classline-it-button styledisplay: none; data-typeshare-e data-langja >/div> script src//scdn.line-apps.com/n/line_it/thirdparty/loader.min.js asyncasync deferdefer >/script> /span> /div> div classgoogle-afc-image test-google-rectangle-ads> script> (valve window.valve || ).push(function(v) { v.displayDFPSlot(google_afc_user_container_6); }); /script> div idgoogle_afc_user_container_6 classgoogle-afc-user-container google_afc_blocklink2_5 google_afc_boder data-test-unit/4374287/blog_user_2nd>/div> a hrefhttp://blog.hatena.ne.jp/guide/pro classopen-pro-modal data-guide-pro-modal-ad-urlhttps://hatena.blog/guide/pro/modal/ad>広告を非表示にする/a> /div> div classcustomized-footer> /div> div classcomment-box js-comment-box> ul classcomment js-comment> li classread-more-comments styledisplay: none;>a>もっと読む/a>/li> /ul> a classleave-comment-title js-leave-comment-title>コメントを書く/a> /div> /footer> /div>/article> article classentry hentry test-hentry js-entry-article date-first autopagerize_page_element chars-2400 words-200 mode-hatena entry-odd identry-10328749687260606384 data-keyword-campaign data-uuid10328749687260606384 data-publication-typeentry> div classentry-inner> header classentry-header> div classdate entry-date first> a hrefhttps://smrmkt.hatenablog.jp/archive/2017/06/05 relnofollow> time datetime2017-06-05T12:20:41Z title2017-06-05T12:20:41Z> span classdate-year>2017/span>span classhyphen>-/span>span classdate-month>06/span>span classhyphen>-/span>span classdate-day>05/span> /time> /a> /div> h1 classentry-title> a hrefhttps://smrmkt.hatenablog.jp/entry/2017/06/05/212041 classentry-title-link bookmark>PySpark で書き出しデータのパーティション数を調節する/a>/h1> /header> div classentry-content hatenablog-entry> p>小ネタなんですが,なかなかググっても見つからず,あれこれと試行錯誤してしまったので,メモがわりに./p>p>要するに,a classkeyword hrefhttp://d.hatena.ne.jp/keyword/gzip>gzip/a> 圧縮してあるデータを読み出して,年月ごとにデータをa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%D1%A1%BC%A5%C6%A5%A3%A5%B7%A5%E7%A5%F3>パーティション/a>分けして,結果を parquet 形式の 1 ファイルで書き出す,みたいな処理がしたいということです.結局 repartition() を使えばよかったので,以下のように yyyymm カラムを一時的に作って,a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%D1%A1%BC%A5%C6%A5%A3%A5%B7%A5%E7%A5%F3>パーティション/a>を切りなおしてからそのカラムを落とすというテクを使いました.普通なら repartition(int) で直接a classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%D1%A1%BC%A5%C6%A5%A3%A5%B7%A5%E7%A5%F3>パーティション/a>数を指定すれば良いんでしょうけど,複数年月が分けられておらず固まったデータを一気に読み込んで,一気にパーティショニングしたいときには,こんな感じで無理やり動かすしかないのかなーという感じです.ちなみに 8-9 行目の処理は,S3 への書き出しを高速化するための設定になりますa href#f-4d75970e namefn-4d75970e titleこのあたりは,http://smrmkt.hatenablog.jp/entry/2016/12/07/224300:title昨年の記事にまとめてあります.>*1/a>./p>p>ちなみに repartition() ではなく coalesce() を使うやり方もありますが,a hrefhttps://hackernoon.com/managing-spark-partitions-with-coalesce-and-repartition-4050c57ad5c4>こちらの記事/a>によるとファイルサイズが均一にそろわないっぽいです.また今回のとは別で,データサイズをみて適切なファイルサイズごとにa classkeyword hrefhttp://d.hatena.ne.jp/keyword/%A5%D1%A1%BC%A5%C6%A5%A3%A5%B7%A5%E7%A5%F3>パーティション/a>を分けたい,という場合であれば,以下の記事にあるように df.inputFiles.size で取得できるんですね./p>p>iframe src//hatenablog-parts.com/embed?urlhttps%3A%2F%2Fstackoverflow.com%2Fquestions%2F33988786%2Fget-size-of-parquet-file-in-hdfs-for-repartition-with-spark-in-scala titleget size of parquet file in HDFS for repartition with Spark in Scala classembed-card embed-webcard scrollingno frameborder0 styledisplay: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;>/iframe>cite classhatena-citation>a hrefhttps://stackoverflow.com/questions/33988786/get-size-of-parquet-file-in-hdfs-for-repartition-with-spark-in-scala>stackoverflow.com/a>/cite>br />/p>pre classcode lang-python data-langpython data-unlink>span classsynPreProc>from/span> pyspark.context span classsynPreProc>import/span> SparkContextspan classsynPreProc>from/span> pyspark.sql span classsynPreProc>import/span> SQLContextspan classsynPreProc>from/span> pyspark.sql.functions span classsynPreProc>import/span> year, month, date_formatin_path span classsynConstant>"s3://XXX/gz/*.gz"/span>out_path span classsynConstant>"s3://XXX/parquet/"/span>sc._jsc.hadoopConfiguration().span classsynIdentifier>set/span>(span classsynConstant>"mapreduce.fileoutputcommitter.algorithm.version"/span>, span classsynConstant>"2"/span>)sc._jsc.hadoopConfiguration().span classsynIdentifier>set/span>(span classsynConstant>"spark.speculation"/span>, span classsynConstant>"false"/span>)sqlContext SQLContext(sc)sqlContext.setConf(span classsynConstant>"spark.sql.parquet.compression.codec"/span>, span classsynConstant>"snappy"/span>)originalDf sqlContext.read span classsynSpecial>\/span> .span classsynIdentifier>format/span>(span classsynConstant>"com.databricks.spark.csv"/span>) span classsynSpecial>\/span> .option(span classsynConstant>"delimiter"/span>, span classsynConstant>"/span>span classsynSpecial>\t/span>span classsynConstant>"/span>) span classsynSpecial>\/span> .load(in_path)renamedDf originalDf span classsynSpecial>\/span> .withColumnRenamed(span classsynConstant>"_c0"/span>, span classsynConstant>"prod_id"/span>) span classsynSpecial>\/span> .withColumnRenamed(span classsynConstant>"_c1"/span>, span classsynConstant>"cust_id"/span>) span classsynSpecial>\/span> .withColumnRenamed(span classsynConstant>"_c2"/span>, span classsynConstant>"time_id"/span>) span classsynSpecial>\/span> .withColumnRenamed(span classsynConstant>"_c3"/span>, span classsynConstant>"amount_sold"/span>)yearAddedDf renamedDf.withColumn(span classsynConstant>"year"/span>, year(renamedDf.time_id))monthAddedDf yearAddedDf.withColumn(span classsynConstant>"month"/span>, month(yearAddedDf.time_id))yyyymmAddedDf monthAddedDf.withColumn(span classsynConstant>"yyyymm"/span>, date_format(monthAddedDf.time_id, span classsynConstant>yyyyMM/span>))repartitionedDf yyyymmAddedDf.repartition(span classsynConstant>"yyyymm"/span>)dropedDf repartitionedDf.drop(span classsynConstant>"yyyymm"/span>)castedDf dropedDf.withColumn(span classsynConstant>"prod_id"/span>, dropedDf.prod_id.cast(span classsynConstant>"decimal(38,0)"/span>)) span classsynSpecial>\/span> .withColumn(span classsynConstant>"cust_id"/span>, dropedDf.cust_id.cast(span classsynConstant>"decimal(38,0)"/span>)) span classsynSpecial>\/span> .withColumn(span classsynConstant>"time_id"/span>, dropedDf.time_id.cast(span classsynConstant>"timestamp"/span>)) span classsynSpecial>\/span> .withColumn(span classsynConstant>"amount_sold"/span>, dropedDf.amount_sold.cast(span classsynConstant>"decimal(38,2)"/span>)) span classsynSpecial>\/span> .withColumn(span classsynConstant>"year"/span>, dropedDf.year.cast(span classsynConstant>"int"/span>)) span classsynSpecial>\/span> .withColumn(span classsynConstant>"month"/span>, dropedDf.month.cast(span classsynConstant>"int"/span>))castedDf.write.partitionBy(span classsynConstant>"year"/span>, span classsynConstant>"month"/span>).mode(span classsynConstant>"overwrite"/span>).parquet(out_path)/pre>div classfootnote>p classfootnote>a href#fn-4d75970e namef-4d75970e classfootnote-number>*1/a>span classfootnote-delimiter>:/span>span classfootnote-text>このあたりは,a hrefhttp://smrmkt.hatenablog.jp/entry/2016/12/07/224300>昨年の記事/a>にまとめてあります./span>/p>/div> /div> footer classentry-footer> div classentry-tags-wrapper> div classentry-tags> /div>/div> p classentry-footer-section track-inview-by-gtm data-gtm-track-json{"area": "finish_reading"}> span classauthor vcard>span classfn data-load-nickname1 data-user-nameSAM >SAM/span>/span> span classentry-footer-time>a hrefhttps://smrmkt.hatenablog.jp/entry/2017/06/05/212041>time data-relative datetime2017-06-05T12:20:41Z title2017-06-05T12:20:41Z classupdated>2017-06-05 21:20/time>/a>/span> span class entry-footer-subscribe data-test-blog-controlls-subscribe> a hrefhttps://blog.hatena.ne.jp/SAM/smrmkt.hatenablog.jp/subscribe?utm_campaignsubscribe_blog&utm_sourceblogs_entry_footer&utm_mediumbutton> 読者になる /a> /span> /p> div classhatena-star-container data-hatena-star-container data-hatena-star-urlhttps://smrmkt.hatenablog.jp/entry/2017/06/05/212041 data-hatena-star-titlePySpark で書き出しデータのパーティション数を調節する data-hatena-star-variantprofile-icon data-hatena-star-profile-url-templatehttps://blog.hatena.ne.jp/{username}/ >/div> div classsocial-buttons> div classsocial-button-item> a hrefhttps://b.hatena.ne.jp/entry/s/smrmkt.hatenablog.jp/entry/2017/06/05/212041 classhatena-bookmark-button data-hatena-bookmark-urlhttps://smrmkt.hatenablog.jp/entry/2017/06/05/212041 data-hatena-bookmark-layoutvertical-balloon data-hatena-bookmark-langja titleこの記事をはてなブックマークに追加>img srchttps://b.st-hatena.com/images/entry-button/button-only.gif altこの記事をはてなブックマークに追加 width20 height20 styleborder: none; />/a> /div> div classsocial-button-item> div classfb-share-button data-layoutbox_count data-hrefhttps://smrmkt.hatenablog.jp/entry/2017/06/05/212041>/div> /div> div classsocial-button-item> a classentry-share-button entry-share-button-twitter test-share-button-twitter hrefhttps://x.com/intent/tweet?textPySpark+%E3%81%A7%E6%9B%B8%E3%81%8D%E5%87%BA%E3%81%97%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3%E6%95%B0%E3%82%92%E8%AA%BF%E7%AF%80%E3%81%99%E3%82%8B+-+About+connecting+the+dots.&urlhttps%3A%2F%2Fsmrmkt.hatenablog.jp%2Fentry%2F2017%2F06%2F05%2F212041 titleX(Twitter)で投稿する >/a> /div> div classsocial-button-item> a hrefhttp://www.tumblr.com/share data-hatenablog-tumblr-share-button data-share-urlhttps://smrmkt.hatenablog.jp/entry/2017/06/05/212041 data-share-titlePySpark で書き出しデータのパーティション数を調節する - About connecting the dots. titleShare on Tumblr styledisplay:inline-block; text-indent:-9999px; overflow:hidden; width:81px; height:20px; background:url(https://platform.tumblr.com/v1/share_1.png) top left no-repeat transparent; vertical-align: top;>Share on Tumblr/a> /div> span> div classline-it-button styledisplay: none; data-typeshare-e data-langja >/div> script src//scdn.line-apps.com/n/line_it/thirdparty/loader.min.js asyncasync deferdefer >/script> /span> /div> div classgoogle-afc-image test-google-rectangle-ads> script> (valve window.valve || ).push(function(v) { v.displayDFPSlot(google_afc_user_container_7); }); /script> div idgoogle_afc_user_container_7 classgoogle-afc-user-container google_afc_blocklink2_5 google_afc_boder data-test-unit/4374287/blog_user_2nd>/div> a hrefhttp://blog.hatena.ne.jp/guide/pro classopen-pro-modal data-guide-pro-modal-ad-urlhttps://hatena.blog/guide/pro/modal/ad>広告を非表示にする/a> /div> div classcustomized-footer> /div> div classcomment-box js-comment-box> ul classcomment js-comment> li classread-more-comments styledisplay: none;>a>もっと読む/a>/li> /ul> a classleave-comment-title js-leave-comment-title>コメントを書く/a> /div> /footer> /div>/article> !-- rakuten_ad_target_end --> !-- google_ad_section_end --> div classpager autopagerize_insert_before> span classpager-next> a hrefhttps://smrmkt.hatenablog.jp/?page1496665241 relnext>次のページ/a> /span> /div> /div> /div> aside idbox1> div idbox1-inner> /div>/aside> /div>!-- #wrapper --> aside idbox2> div idbox2-inner> div classhatena-module hatena-module-profile> div classhatena-module-title> Profile /div> div classhatena-module-body> a hrefhttps://smrmkt.hatenablog.jp/about classprofile-icon-link> img srchttps://cdn.profile-image.st-hatena.com/users/SAM/profile.png?1409401443 altid:SAM classprofile-icon /> /a> span classid> a hrefhttps://smrmkt.hatenablog.jp/about classhatena-id-link>span data-load-nickname1 data-user-nameSAM>id:SAM/span>/a> /span> div classhatena-follow-button-box btn-subscribe js-hatena-follow-button-box > a href# classhatena-follow-button js-hatena-follow-button> span classsubscribing> span classforeground>読者です/span> span classbackground>読者をやめる/span> /span> span classunsubscribing data-track-nameprofile-widget-subscribe-button data-track-once> span classforeground>読者になる/span> span classbackground>読者になる/span> /span> /a> div classsubscription-count-box js-subscription-count-box> i>/i> u>/u> span classsubscription-count js-subscription-count> /span> /div>/div> div classprofile-about> a hrefhttps://smrmkt.hatenablog.jp/about>このブログについて/a> /div> /div>/div> div classhatena-module hatena-module-search-box> div classhatena-module-title> Search /div> div classhatena-module-body> form classsearch-form rolesearch actionhttps://smrmkt.hatenablog.jp/search methodget> input typetext nameq classsearch-module-input value placeholder記事を検索 required> input typesubmit value検索 classsearch-module-button />/form> /div>/div> div classhatena-module hatena-module-html> div classhatena-module-title>Hot Entries/div> div classhatena-module-body> script languagejavascript typetext/javascript srchttp://b.hatena.ne.jp/js/widget.js charsetutf-8>/script>script languagejavascript typetext/javascript>Hatena.BookmarkWidget.url http://smrmkt.hatenablog.jp/;Hatena.BookmarkWidget.title エントリー;Hatena.BookmarkWidget.sort count;Hatena.BookmarkWidget.width 0;Hatena.BookmarkWidget.num 5;Hatena.BookmarkWidget.theme default;Hatena.BookmarkWidget.load();/script>style>.hatena-bookmark-widget div.hatena-bookmark-widget-title, .hatena-bookmark-widget div.hatena-bookmark-widget-footer { display: none;}.hatena-bookmark-widget ul { border: none; background-color: #fff;}.hatena-bookmark-widget, .hatena-bookmark-widget ul li { font-size: 1.0em;}.hatena-bookmark-widget ul li { height: 5.1em;}.hatena-bookmark-widget ul li a.hatena-bookmark-entrytitle { padding: 0.7em 0;}.hatena-bookmark-widget a:visited { color: #7d9ab7;}.hatena-bookmark-widget a:link { color: #256fba;}/style> /div>/div> div classhatena-module hatena-module-html> div classhatena-module-title>Recent Entries/div> div classhatena-module-body> script languagejavascript typetext/javascript srchttp://b.hatena.ne.jp/js/widget.js charsetutf-8>/script>script languagejavascript typetext/javascript>Hatena.BookmarkWidget.url http://smrmkt.hatenablog.jp/;Hatena.BookmarkWidget.title エントリー;Hatena.BookmarkWidget.sort hot;Hatena.BookmarkWidget.width 0;Hatena.BookmarkWidget.num 5;Hatena.BookmarkWidget.theme default;Hatena.BookmarkWidget.load();/script>style>.hatena-bookmark-widget div.hatena-bookmark-widget-title, .hatena-bookmark-widget div.hatena-bookmark-widget-footer { display: none;}.hatena-bookmark-widget ul { border: none; background-color: #fff;}.hatena-bookmark-widget, .hatena-bookmark-widget ul li { font-size: 1.0em;}.hatena-bookmark-widget ul li { height: 5.1em;}.hatena-bookmark-widget ul li a.hatena-bookmark-entrytitle { padding: 0.7em 0;}.hatena-bookmark-widget a:visited { color: #7d9ab7;}.hatena-bookmark-widget a:link { color: #256fba;}/style> /div>/div> div classhatena-module hatena-module-archive data-archive-typedefault data-archive-urlhttps://smrmkt.hatenablog.jp/archive> div classhatena-module-title> a hrefhttps://smrmkt.hatenablog.jp/archive>Archive/a> /div> div classhatena-module-body> ul classhatena-urllist> li classarchive-module-year archive-module-year-hidden data-year2022> div classarchive-module-button> span classarchive-module-hide-button>▼/span> span classarchive-module-show-button>▶/span> /div> a hrefhttps://smrmkt.hatenablog.jp/archive/2022 classarchive-module-year-title archive-module-year-2022> 2022 /a> ul classarchive-module-months> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2022/12 classarchive-module-month-title archive-module-month-2022-12> 2022 / 12 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2022/10 classarchive-module-month-title archive-module-month-2022-10> 2022 / 10 /a> /li> /ul> /li> li classarchive-module-year archive-module-year-hidden data-year2021> div classarchive-module-button> span classarchive-module-hide-button>▼/span> span classarchive-module-show-button>▶/span> /div> a hrefhttps://smrmkt.hatenablog.jp/archive/2021 classarchive-module-year-title archive-module-year-2021> 2021 /a> ul classarchive-module-months> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2021/12 classarchive-module-month-title archive-module-month-2021-12> 2021 / 12 /a> /li> /ul> /li> li classarchive-module-year archive-module-year-hidden data-year2018> div classarchive-module-button> span classarchive-module-hide-button>▼/span> span classarchive-module-show-button>▶/span> /div> a hrefhttps://smrmkt.hatenablog.jp/archive/2018 classarchive-module-year-title archive-module-year-2018> 2018 /a> ul classarchive-module-months> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2018/05 classarchive-module-month-title archive-module-month-2018-5> 2018 / 5 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2018/02 classarchive-module-month-title archive-module-month-2018-2> 2018 / 2 /a> /li> /ul> /li> li classarchive-module-year archive-module-year-hidden data-year2017> div classarchive-module-button> span classarchive-module-hide-button>▼/span> span classarchive-module-show-button>▶/span> /div> a hrefhttps://smrmkt.hatenablog.jp/archive/2017 classarchive-module-year-title archive-module-year-2017> 2017 /a> ul classarchive-module-months> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2017/10 classarchive-module-month-title archive-module-month-2017-10> 2017 / 10 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2017/06 classarchive-module-month-title archive-module-month-2017-6> 2017 / 6 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2017/05 classarchive-module-month-title archive-module-month-2017-5> 2017 / 5 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2017/01 classarchive-module-month-title archive-module-month-2017-1> 2017 / 1 /a> /li> /ul> /li> li classarchive-module-year archive-module-year-hidden data-year2016> div classarchive-module-button> span classarchive-module-hide-button>▼/span> span classarchive-module-show-button>▶/span> /div> a hrefhttps://smrmkt.hatenablog.jp/archive/2016 classarchive-module-year-title archive-module-year-2016> 2016 /a> ul classarchive-module-months> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2016/12 classarchive-module-month-title archive-module-month-2016-12> 2016 / 12 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2016/10 classarchive-module-month-title archive-module-month-2016-10> 2016 / 10 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2016/07 classarchive-module-month-title archive-module-month-2016-7> 2016 / 7 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2016/06 classarchive-module-month-title archive-module-month-2016-6> 2016 / 6 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2016/05 classarchive-module-month-title archive-module-month-2016-5> 2016 / 5 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2016/04 classarchive-module-month-title archive-module-month-2016-4> 2016 / 4 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2016/02 classarchive-module-month-title archive-module-month-2016-2> 2016 / 2 /a> /li> /ul> /li> li classarchive-module-year archive-module-year-hidden data-year2015> div classarchive-module-button> span classarchive-module-hide-button>▼/span> span classarchive-module-show-button>▶/span> /div> a hrefhttps://smrmkt.hatenablog.jp/archive/2015 classarchive-module-year-title archive-module-year-2015> 2015 /a> ul classarchive-module-months> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2015/12 classarchive-module-month-title archive-module-month-2015-12> 2015 / 12 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2015/08 classarchive-module-month-title archive-module-month-2015-8> 2015 / 8 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2015/04 classarchive-module-month-title archive-module-month-2015-4> 2015 / 4 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2015/03 classarchive-module-month-title archive-module-month-2015-3> 2015 / 3 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2015/02 classarchive-module-month-title archive-module-month-2015-2> 2015 / 2 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2015/01 classarchive-module-month-title archive-module-month-2015-1> 2015 / 1 /a> /li> /ul> /li> li classarchive-module-year archive-module-year-hidden data-year2014> div classarchive-module-button> span classarchive-module-hide-button>▼/span> span classarchive-module-show-button>▶/span> /div> a hrefhttps://smrmkt.hatenablog.jp/archive/2014 classarchive-module-year-title archive-module-year-2014> 2014 /a> ul classarchive-module-months> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2014/12 classarchive-module-month-title archive-module-month-2014-12> 2014 / 12 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2014/11 classarchive-module-month-title archive-module-month-2014-11> 2014 / 11 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2014/10 classarchive-module-month-title archive-module-month-2014-10> 2014 / 10 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2014/09 classarchive-module-month-title archive-module-month-2014-9> 2014 / 9 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2014/08 classarchive-module-month-title archive-module-month-2014-8> 2014 / 8 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2014/07 classarchive-module-month-title archive-module-month-2014-7> 2014 / 7 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2014/05 classarchive-module-month-title archive-module-month-2014-5> 2014 / 5 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2014/04 classarchive-module-month-title archive-module-month-2014-4> 2014 / 4 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2014/03 classarchive-module-month-title archive-module-month-2014-3> 2014 / 3 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2014/01 classarchive-module-month-title archive-module-month-2014-1> 2014 / 1 /a> /li> /ul> /li> li classarchive-module-year archive-module-year-hidden data-year2013> div classarchive-module-button> span classarchive-module-hide-button>▼/span> span classarchive-module-show-button>▶/span> /div> a hrefhttps://smrmkt.hatenablog.jp/archive/2013 classarchive-module-year-title archive-module-year-2013> 2013 /a> ul classarchive-module-months> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2013/12 classarchive-module-month-title archive-module-month-2013-12> 2013 / 12 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2013/11 classarchive-module-month-title archive-module-month-2013-11> 2013 / 11 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2013/10 classarchive-module-month-title archive-module-month-2013-10> 2013 / 10 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2013/09 classarchive-module-month-title archive-module-month-2013-9> 2013 / 9 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2013/08 classarchive-module-month-title archive-module-month-2013-8> 2013 / 8 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2013/06 classarchive-module-month-title archive-module-month-2013-6> 2013 / 6 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2013/05 classarchive-module-month-title archive-module-month-2013-5> 2013 / 5 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2013/04 classarchive-module-month-title archive-module-month-2013-4> 2013 / 4 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2013/03 classarchive-module-month-title archive-module-month-2013-3> 2013 / 3 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2013/02 classarchive-module-month-title archive-module-month-2013-2> 2013 / 2 /a> /li> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2013/01 classarchive-module-month-title archive-module-month-2013-1> 2013 / 1 /a> /li> /ul> /li> li classarchive-module-year archive-module-year-hidden data-year2012> div classarchive-module-button> span classarchive-module-hide-button>▼/span> span classarchive-module-show-button>▶/span> /div> a hrefhttps://smrmkt.hatenablog.jp/archive/2012 classarchive-module-year-title archive-module-year-2012> 2012 /a> ul classarchive-module-months> li classarchive-module-month> a hrefhttps://smrmkt.hatenablog.jp/archive/2012/12 classarchive-module-month-title archive-module-month-2012-12> 2012 / 12 /a> /li> /ul> /li> /ul> /div>/div> /div>/aside> /div>/div> div idbottom-editarea> script> (function(i,s,o,g,r,a,m){iGoogleAnalyticsObjectr;irir||function(){ (ir.qir.q||).push(arguments)},ir.l1*new Date();as.createElement(o), ms.getElementsByTagName(o)0;a.async1;a.srcg;m.parentNode.insertBefore(a,m) })(window,document,script,//www.google-analytics.com/analytics.js,ga); ga(create, UA-39921729-1, hatenablog.jp); ga(require, displayfeatures); ga(send, pageview);/script> /div> /div> /div> footer idfooter data-brandhatenablog> div idfooter-inner> address classfooter-address> a hrefhttps://smrmkt.hatenablog.jp/> img srchttps://cdn.blog.st-hatena.com/images/admin/blog-icon-noimage.png width16 height16 altAbout connecting the dots./> span classfooter-address-name>About connecting the dots./span> /a> /address> p classservices> Powered by a hrefhttps://hatena.blog/>Hatena Blog/a> | a hrefhttps://blog.hatena.ne.jp/-/abuse_report?target_urlhttps%3A%2F%2Fsmrmkt.hatenablog.jp%2F classreport-abuse-link test-report-abuse-link target_blank>ブログを報告する/a> /p> /div>/footer> script async srchttps://s.hatena.ne.jp/js/widget/star.js>/script> script> if (typeof window.Hatena undefined) { window.Hatena {}; } if (!Hatena.hasOwnProperty(Star)) { Hatena.Star { VERSION: 2, }; } /script> div idfb-root>/div>script>(function(d, s, id) { var js, fjs d.getElementsByTagName(s)0; if (d.getElementById(id)) return; js d.createElement(s); js.id id; js.src //connect.facebook.net/ja_JP/sdk.js#xfbml1&appId719729204785177&versionv17.0; fjs.parentNode.insertBefore(js, fjs);}(document, script, facebook-jssdk));/script> div classquote-box> div classtooltip-quote tooltip-quote-stock> i classblogicon-quote title引用をストック>/i> /div> div classtooltip-quote tooltip-quote-tweet js-tooltip-quote-tweet> a classjs-tweet-quote target_blank data-track-namequote-tweet data-track-once> img srchttps://cdn.blog.st-hatena.com/images/admin/quote/quote-x-icon.svg?versionabf96f4605410ec3d67a4284c01b45 title引用して投稿する > /a> /div>/div>div classquote-stock-panel idquote-stock-message-box styleposition: absolute; z-index: 3000> div classmessage-box idquote-stock-succeeded-message styledisplay: none> p>引用をストックしました/p> button classbtn btn-primary idquote-stock-show-editor-button data-track-namecuration-quote-edit-button>ストック一覧を見る/button> button classbtn quote-stock-close-message-button>閉じる/button> /div> div classmessage-box idquote-login-required-message styledisplay: none> p>引用するにはまずログインしてください/p> button classbtn btn-primary idquote-login-button>ログイン/button> button classbtn quote-stock-close-message-button>閉じる/button> /div> div classerror-box idquote-stock-failed-message styledisplay: none> p>引用をストックできませんでした。再度お試しください/p> button classbtn quote-stock-close-message-button>閉じる/button> /div> div classerror-box idunstockable-quote-message-box styledisplay: none; position: absolute; z-index: 3000;> p>限定公開記事のため引用できません。/p> /div>/div>script typex-underscore-template idjs-requote-button-template> div classrequote-button js-requote-button> button classrequote-button-btn tipsy-top title引用する>i classblogicon-quote>/i>/button> /div>/script> div idhidden-subscribe-button styledisplay: none;> div classhatena-follow-button-box btn-subscribe js-hatena-follow-button-box > a href# classhatena-follow-button js-hatena-follow-button> span classsubscribing> span classforeground>読者です/span> span classbackground>読者をやめる/span> /span> span classunsubscribing data-track-nameprofile-widget-subscribe-button data-track-once> span classforeground>読者になる/span> span classbackground>読者になる/span> /span> /a> div classsubscription-count-box js-subscription-count-box> i>/i> u>/u> span classsubscription-count js-subscription-count> /span> /div>/div> /div> script async srchttps://platform.twitter.com/widgets.js charsetutf-8>/script>script srchttps://b.st-hatena.com/js/bookmark_button.js charsetutf-8 asyncasync>/script>script typetext/javascript srchttps://cdn.blog.st-hatena.com/js/external/jquery.min.js?v1.12.4&versionabf96f4605410ec3d67a4284c01b45>/script>script srchttps://cdn.blog.st-hatena.com/js/texts-ja.js?versionabf96f4605410ec3d67a4284c01b45>/script> script idvendors-js data-envproduction srchttps://cdn.blog.st-hatena.com/js/vendors.js?versionabf96f4605410ec3d67a4284c01b45 crossoriginanonymous>/script>script idhatenablog-js data-envproduction srchttps://cdn.blog.st-hatena.com/js/hatenablog.js?versionabf96f4605410ec3d67a4284c01b45 crossoriginanonymous data-page-idindex>/script> script>Hatena.Diary.GlobalHeader.init()/script> script idvalve-dmp data-serviceblog srchttps://cdn.pool.st-hatena.com/valve/dmp.js data-test-iddmpjs async>/script> /body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]