Glovia Order Management (on Salesforce) を使ってみようか (11)
実に久々の投稿となると、その投稿に対して自身でハードルを上げてしまって良くないですね。(反省
それはともかく、gOMネタの紹介を細々と再開しようと思います。
今回は「在庫予約」オブジェクトに関するネタでも、と。
Salesforce World Tour Tokyo2014: MiniHack を(ちょこっと)やってみたよ
先日、Salesforce World Tour Tokyoが盛大に開催されましたね。Dev向けの会場は虎ノ門ヒルズでしたので、当日は虎ノ門ヒルズにずっと居座ってました。(別会場の方も行ってみたかったのですが...色々な事情で諦めました。。)
さて、今回も恒例の"MiniHack"が行われました。6つのお題("H", "A", "C", "K", "E", "R")に答えて景品をGETする!という類いのものです。
続きを読むQiita 始めてみました。
最近、技術ネタをQiitaに投稿するようにしてみました。
今のところ、まだ3つしかないですが、ジョジョ徐々に増やしていければ・・と思います。Force.com開発上の小ネタとか。
- Sencha - SalesforceにExt JSを適用する際のcssの上書きを(多少)防ぐ - Qiita
- Sencha - Javascript RemoteActionを使ったExt JSアプリを試してみる(Apex編) - Qiita
- Sencha - Javascript RemoteActionを使ったExt JSアプリを試してみる(Ext JS編)(1) - Qiita
すっかり秋になってきましたね。
急に涼しくなったせいか、鼻づまりになって体調崩したかな・・?と思ったのですが、実は秋の花粉症じゃないか?とも疑う今日この頃です。。
いづれにしても、早く落ち着いて欲しいところです。
Force.com と Heroku の程よい関係を模索して...(1)?
この記事は、Force.com AdventCalendar2013の18日目の記事になります。
先日のDreamforceでは、"Salesforce1"プラットフォームに関する大々的な発表がありました。
それに合わせるかのようにheroku1なんてモノも発表されました。
salesforceのプラットフォームサービスとして、force.comとherokuが結びつく日も近くなってきて、なかなか楽しみですね!
Schema Namespace について
そろそろForce.comのバージョンもWinter' 14になる季節となりました。(あぁ!更新試験....)
それに先立って、ApexのリファレンスもVersion 29.0 となってますね。それにしても、v29.0になってリファレンスの構成も大幅に見直した模様で、v28.0までに慣れていると、欲しい情報がどこにあったかなーとすぐに見つけられません。。(まぁ、そのうち慣れるでしょう、ということで。)
Cloudforce2012 Mini Hackに参加したよ (2)
前回の続きです。
2つ目のお題は "Treasure Data Mini Hack" です。
Treasure Data Mini Hack
ふむふむ。Treasure Dataネタですね。
※Force.comとは無関係ですが、頑張ってみましょう。
tdコマンドのインストール
Toolbeltが用意されているので、これも簡単ですね。
ちなみに、herokuもToolbeltを用意してますねー。インストールパッケージを用意してくれると、気軽に使えるようになっていいですね!ww
TweetデータをTreasure Dataにアップロード
さて、ココからが本番です。ローカルに保存したデータをアップロードしましょう!
Treasure Dataから提供されているドキュメントが非常に参考になりますので、併せて確認ください!
1. ログイン
ターミナルで
$ td account -f
と入力して、ユーザIDとパスワードを聞かれるので、そのまま入力してログインします。
2. データベース&テーブルの作成
Treasure Data内にデータベースと、その中にテーブルを作成します。
$ td db:create cfj2012
$ td table:create cfj2012 test
最初のコマンドで "cfj2012" というデータベースを作成します。
そして、"cfj2012"データベースの中に、"test"というテーブルを作成します。
3. Tweetデータのアップロード
$ td table:import cjf2012 test --json tweet.json
td table:import コマンドで「データベース」「テーブル」と、アップロードするローカルのファイルを指定して、インポートします。
・
・
・
というだけで良かったはずなのですが、
skipped: argument out of range: "{\"retweet_count\":\"0\",\"time\":\"1352901513\",\"user_screen_name\":\"philnash\",\"user_name\":\"Phil Nash\",\"created_at\":\"2012-11-14 08:58:32 -0500\",\"text\":\"@_dte Why not just use Heroku for Ruby stuff?\"}\n" uploading 8969 bytes... imported 89 entries from tweet.json.
と結果が返ってきました。。。。。
んー・・・何か激しくエラーが発生してるみたいで、OKかどうか悩ましいところです。。。
skipped: argument out of range
が、どうにも怪しいので、色々ググるとこんな感じのエラーみたいでした。
Time: argument out of range (ArgumentError)
時刻のデータをパースする際にエラーになってるみたいですが、一体何がッ・・・!?
で、結局、Treasure Dataのブースにいた方々の支援を得ました..w
どうやら、Tweet.json内の
"time":"1352901513"
が悪さをしているようでした。
Treasure Data側が「文字列」として指定されている"1352901513"を時刻型でパースしようとして"argument out of range"エラーが発生していたようです。
なんと・・・_| ̄|○
結局のところ
$ td table:import cfj2012 test --json tweet.json -t "created_at"
という感じに、timeの指定をオプションで付加することで、
importing tweet.json... uploading 808174 bytes... imported 9817 entries from tweet.json. done.
と無事にインポートできました!
※しかし、最初のインポートで、89件は取り込まれた模様ですが、この89件は何でしょうね??
カスタマーダッシュボードで確認すると、こんな感じでした。
↓
ジョブの実行
さて、データがインポートできましたので、クエリを発行してみましょう!
$ td query -d cfj2012 -w 'SELECT COUNT(*) FROM test'
とコマンドを実行してみると・・・?
Job 1319769 is queued. Use 'td job:show 1319769' to show the status. queued... started at 2012-12-20T13:06:32Z Hive history file=/tmp/1237/hive_job_log__276669154.txt Total MapReduce jobs = 1 Launching Job 1 out of 1 Number of reduce tasks determined at compile time: 1 In order to change the average load for a reducer (in bytes): set hive.exec.reducers.bytes.per.reducer=<number> In order to limit the maximum number of reducers: set hive.exec.reducers.max=<number> In order to set a constant number of reducers: set mapred.reduce.tasks=<number> Starting Job = job_201209262127_180974, Tracking URL = http://ip-10-8-189-47.ec2.internal:50030/jobdetails.jsp?jobid=job_201209262127_180974 Kill Command = /usr/lib/hadoop/bin/hadoop job -Dmapred.job.tracker=10.8.189.47:8021 -kill job_201209262127_180974 2012-12-20 13:06:46,411 Stage-1 map = 0%, reduce = 0% 2012-12-20 13:06:55,512 Stage-1 map = 65%, reduce = 0% 2012-12-20 13:06:58,541 Stage-1 map = 80%, reduce = 0% 2012-12-20 13:07:01,570 Stage-1 map = 92%, reduce = 0% 2012-12-20 13:07:04,604 Stage-1 map = 100%, reduce = 0% finished at 2012-12-20T13:07:15Z 2012-12-20 13:07:12,684 Stage-1 map = 100%, reduce = 100% Ended Job = job_201209262127_180974 OK MapReduce time taken: 36.445 seconds Time taken: 36.621 seconds Status : success Result : +-------+ | _c0 | +-------+ | 19724 | +-------+ 1 row in set
・・・という結果になりました。
※インポートコマンドを何回か実行してるので、データ件数は実際とは異なるかと思います。
おしまい
今回、初めてTreasure Dataに触れる機会がありました。
こうして見ると、課題自体は非常にシンプルなのですが、実際に手を動かしてやってみて、クエリの結果が返ってくるとなかなか楽しいものですね!
また、まずはちょっと触ってもらう、知ってもらう・・ために、こうした"Mini Hack"をやるのは非常に良かったと思います。
"Force.com"と"Treausre Data"を組み合わせると、何か面白いソリューションとかできそうな予感もします。
例えば、Salesforce側で蓄積された過去の実績データ(売上とか?)の退避先として"Treasure Data"を選ぶ・・というのも、面白いかもしれません。(会社のルール等の制約で難しいかもしれませんが・・・)
また、中の人から聞いた話では、Talend Open StudioなどのETLツールと組み合わせることも可能(参考)ということなので、一度試してみる価値はありそうですッ・・・!
さて、この雑記はAdvent Calendar 21日目にエントリしています。
もう残すところわずかになりましたねー。最後まで頑張りましょう!
ではでは〜