Class: Eost::Bigquery
- Inherits:
-
Object
- Object
- Eost::Bigquery
- Defined in:
- lib/eost/bigquery.rb,
lib/eost/folhacalculo.rb
Overview
trabalhar com folhas calculo bloks.io & dados no bigquery
Instance Attribute Summary collapse
-
#api ⇒ Google::Cloud::Bigquery
readonly
API bigquery.
-
#folha ⇒ Roo::CSV
readonly
Folha calculo a processar.
-
#job ⇒ Google::Cloud::Bigquery::QueryJob
readonly
Job bigquery.
-
#linha ⇒ Hash<Symbol, Boolean>
readonly
Opcoes trabalho com linhas.
-
#row ⇒ Array
readonly
Row folha calculo em processamento.
-
#sqr ⇒ Google::Cloud::Bigquery::Data
readonly
Resultado do SQL.
Instance Method Summary collapse
-
#act(htx) ⇒ Hash
Dados da acao.
-
#act_data(htx) ⇒ Hash
Dados da acao.
-
#carteiras ⇒ Carteiras
API eosscan - processar carteiras & transacoes.
-
#dml(cmd) ⇒ Integer
cria Data Manipulation Language (DML) job bigquery.
-
#eos_api_val1(htx) ⇒ String
Valores formatados para insert eos (parte1).
-
#eos_api_val2(htx) ⇒ String
Valores formatados para insert eos (parte2).
-
#eos_csv_val1 ⇒ String
Valores formatados para insert eos (parte1).
-
#eos_csv_val2 ⇒ String
Valores formatados para insert eos (parte2).
-
#eos_fields ⇒ String
Campos da tabela eos no bigquery.
-
#eos_insert_api ⇒ Integer
Numero linhas inseridas.
-
#eos_insert_csv ⇒ Integer
Numero linhas inseridas.
-
#initialize(csv = '', ops = { e: false, m: false, i: false }) ⇒ Bigquery
constructor
Acesso folhas calculo bloks.io & correspondente bigquery dataset.
-
#job?(cmd) ⇒ Boolean
cria job bigquery & verifica execucao.
-
#processa ⇒ Object
insere transacoes novas na tabela eos.
-
#processa_csv ⇒ Object
processa folha calculo.
-
#processa_row(has) ⇒ String
processa linha folha calculo para arquivo.
-
#row_existe? ⇒ Boolean
Linha folha calculo existe no bigquery?.
-
#row_existente ⇒ String
Linha folha calculo existente.
-
#row_multiplas ⇒ String
Linha folha calculo existencia multipla.
-
#row_naoexiste? ⇒ Boolean
Linha folha calculo nao existe no bigquery?.
-
#row_r1 ⇒ String
Linha folha calculo formatada.
-
#row_r2 ⇒ String
Linha folha calculo formatada.
-
#row_str ⇒ String
Linha folha calculo formatada.
-
#sql(cmd, red = []) ⇒ Google::Cloud::Bigquery::Data
cria Structured Query Language (SQL) job bigquery.
-
#sql_where ⇒ String
Parte sql para processamento linhas existentes.
-
#str_apagadas(num) ⇒ String
Texto formatado linhas apagadas.
-
#transacoes ⇒ Carteiras
API eosscan - processar transacoes.
Constructor Details
#initialize(csv = '', ops = { e: false, m: false, i: false }) ⇒ Bigquery
Returns acesso folhas calculo bloks.io & correspondente bigquery dataset.
33 34 35 36 37 38 39 40 |
# File 'lib/eost/bigquery.rb', line 33 def initialize(csv = '', ops = { e: false, m: false, i: false }) @folha = Roo::CSV.new(csv) if csv.size.positive? @linha = ops # usa env GOOGLE_APPLICATION_CREDENTIALS para obter credentials # @see https://cloud.google.com/bigquery/docs/authentication/getting-started @api = Google::Cloud::Bigquery.new end |
Instance Attribute Details
#api ⇒ Google::Cloud::Bigquery (readonly)
Returns API bigquery.
19 20 21 |
# File 'lib/eost/bigquery.rb', line 19 def api @api end |
#folha ⇒ Roo::CSV (readonly)
Returns folha calculo a processar.
14 15 16 |
# File 'lib/eost/bigquery.rb', line 14 def folha @folha end |
#job ⇒ Google::Cloud::Bigquery::QueryJob (readonly)
Returns job bigquery.
23 24 25 |
# File 'lib/eost/bigquery.rb', line 23 def job @job end |
#linha ⇒ Hash<Symbol, Boolean> (readonly)
Returns opcoes trabalho com linhas.
16 17 18 |
# File 'lib/eost/bigquery.rb', line 16 def linha @linha end |
#row ⇒ Array (readonly)
Returns row folha calculo em processamento.
21 22 23 |
# File 'lib/eost/bigquery.rb', line 21 def row @row end |
#sqr ⇒ Google::Cloud::Bigquery::Data (readonly)
Returns resultado do SQL.
25 26 27 |
# File 'lib/eost/bigquery.rb', line 25 def sqr @sqr end |
Instance Method Details
#act(htx) ⇒ Hash
Returns dados da acao.
128 129 130 |
# File 'lib/eost/bigquery.rb', line 128 def act(htx) htx['action_trace']['act'] end |
#act_data(htx) ⇒ Hash
Returns dados da acao.
134 135 136 |
# File 'lib/eost/bigquery.rb', line 134 def act_data(htx) act(htx)['data'] end |
#carteiras ⇒ Carteiras
Returns API eosscan - processar carteiras & transacoes.
54 55 56 |
# File 'lib/eost/bigquery.rb', line 54 def carteiras transacoes end |
#dml(cmd) ⇒ Integer
cria Data Manipulation Language (DML) job bigquery
162 163 164 |
# File 'lib/eost/bigquery.rb', line 162 def dml(cmd) job?(cmd) ? 0 : job.num_dml_affected_rows end |
#eos_api_val1(htx) ⇒ String
Returns valores formatados para insert eos (parte1).
106 107 108 109 110 111 112 113 114 |
# File 'lib/eost/bigquery.rb', line 106 def eos_api_val1(htx) "(#{Integer(htx['block_num'])}," \ "DATETIME(TIMESTAMP('#{htx['block_time']}'))," \ "'#{act(htx)['account']}'," \ "'#{act(htx)['name']}'," \ "'#{act_data(htx)['from']}'," \ "'#{act_data(htx)['to']}'," \ "#{eos_api_val2(htx)}" end |
#eos_api_val2(htx) ⇒ String
Returns valores formatados para insert eos (parte2).
118 119 120 121 122 123 124 |
# File 'lib/eost/bigquery.rb', line 118 def eos_api_val2(htx) "#{act_data(htx)['quantity'].to_d}," \ "'#{act_data(htx)['quantity'][/[[:upper:]]+/]}'," \ "'#{act_data(htx)['memo']}'," \ "'#{act_data(htx)}'," \ "#{Integer(linha[:h][String(htx['block_num'])] || 0)})" end |
#eos_csv_val1 ⇒ String
Returns valores formatados para insert eos (parte1).
81 82 83 84 85 86 |
# File 'lib/eost/bigquery.rb', line 81 def eos_csv_val1 "#{row[0]}," \ "'#{Time.parse(row[1]).strftime(DI)}'," \ "'#{row[2]}'," \ "#{eos_csv_val2}" end |
#eos_csv_val2 ⇒ String
Returns valores formatados para insert eos (parte2).
89 90 91 92 93 94 95 96 97 |
# File 'lib/eost/bigquery.rb', line 89 def eos_csv_val2 "'#{row[3]}'," \ "'#{row[4]}'," \ "'#{row[5]}'," \ "#{Float(row[6])}," \ "'#{row[7]}'," \ "'#{row[8]}'," \ "'#{row[9]}',0" end |
#eos_fields ⇒ String
Returns campos da tabela eos no bigquery.
64 65 66 |
# File 'lib/eost/bigquery.rb', line 64 def eos_fields 'blocknumber,time,contract,action,acfrom,acto,amount,symbol,memo,data,dias' end |
#eos_insert_api ⇒ Integer
Returns numero linhas inseridas.
100 101 102 |
# File 'lib/eost/bigquery.rb', line 100 def eos_insert_api dml("INSERT #{BD}.eos(#{eos_fields}) VALUES#{transacoes.novas.map { |e| eos_api_val1(e) }.join(',')}") end |
#eos_insert_csv ⇒ Integer
Returns numero linhas inseridas.
74 75 76 77 78 |
# File 'lib/eost/bigquery.rb', line 74 def eos_insert_csv return 1 unless linha[:i] dml("INSERT #{BD}.eos(#{eos_fields}) VALUES(#{eos_csv_val1})") end |
#job?(cmd) ⇒ Boolean
cria job bigquery & verifica execucao
142 143 144 145 146 147 |
# File 'lib/eost/bigquery.rb', line 142 def job?(cmd) @job = api.query_job(cmd) @job.wait_until_done! puts(@job.error['message']) if @job.failed? @job.failed? end |
#processa ⇒ Object
insere transacoes novas na tabela eos
59 60 61 |
# File 'lib/eost/bigquery.rb', line 59 def processa puts(format("%<n>2i LINHAS INSERIDAS #{BD}.eos", n: transacoes.novas.count.positive? ? eos_insert_api : 0)) end |
#processa_csv ⇒ Object
processa folha calculo
11 12 13 14 15 16 17 |
# File 'lib/eost/folhacalculo.rb', line 11 def processa_csv n = 0 folha.sheet(0).parse(header_search: HT) do |r| n += 1 puts n == 1 ? "\n#{folha.info}" : processa_row(r) end end |
#processa_row(has) ⇒ String
processa linha folha calculo para arquivo
23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/eost/folhacalculo.rb', line 23 def processa_row(has) @row = has.values # array.count = 0 ==> pode carregar esta linha # array.count >= 1 ==> nao carregar esta linha sql("select #{eos_fields} #{sql_where}", [{}, {}]) if row_naoexiste? then row_str + (eos_insert_csv == 1 ? ' NOVA' : ' ERRO') elsif row_existe? then row_existente else row_multiplas end end |
#row_existe? ⇒ Boolean
Returns linha folha calculo existe no bigquery?.
75 76 77 |
# File 'lib/eost/folhacalculo.rb', line 75 def row_existe? sqr.count == 1 end |
#row_existente ⇒ String
Returns linha folha calculo existente.
52 53 54 55 |
# File 'lib/eost/folhacalculo.rb', line 52 def row_existente d = linha[:e] ? dml("delete #{sql_where}") : 0 "#{row_str} EXISTENTE#{str_apagadas(d)}" end |
#row_multiplas ⇒ String
Returns linha folha calculo existencia multipla.
58 59 60 61 |
# File 'lib/eost/folhacalculo.rb', line 58 def row_multiplas d = linha[:m] ? dml("delete #{sql_where}") : 0 "#{row_str} MULTIPLAS #{sql.count}#{str_apagadas(d)}" end |
#row_naoexiste? ⇒ Boolean
Returns linha folha calculo nao existe no bigquery?.
70 71 72 |
# File 'lib/eost/folhacalculo.rb', line 70 def row_naoexiste? sqr.count.zero? end |
#row_r1 ⇒ String
Returns linha folha calculo formatada.
42 43 44 |
# File 'lib/eost/folhacalculo.rb', line 42 def row_r1 format(R1, v5: row[4], v6: row[5]) end |
#row_r2 ⇒ String
Returns linha folha calculo formatada.
47 48 49 |
# File 'lib/eost/folhacalculo.rb', line 47 def row_r2 format(R2, v7: Float(row[6]), v8: row[7]) end |
#row_str ⇒ String
Returns linha folha calculo formatada.
37 38 39 |
# File 'lib/eost/folhacalculo.rb', line 37 def row_str "#{row[0]} #{Time.parse(row[1]).strftime(DF)} " + row_r1 + row_r2 end |
#sql(cmd, red = []) ⇒ Google::Cloud::Bigquery::Data
cria Structured Query Language (SQL) job bigquery
154 155 156 |
# File 'lib/eost/bigquery.rb', line 154 def sql(cmd, red = []) @sqr = job?(cmd) ? red : job.data end |
#sql_where ⇒ String
Returns parte sql para processamento linhas existentes.
69 70 71 |
# File 'lib/eost/bigquery.rb', line 69 def sql_where "from #{BD}.eos where blocknumber=#{row[0]}" end |
#str_apagadas(num) ⇒ String
Returns texto formatado linhas apagadas.
65 66 67 |
# File 'lib/eost/folhacalculo.rb', line 65 def str_apagadas(num) num.positive? ? " & #{num} APAGADA(S) " : ' ' end |
#transacoes ⇒ Carteiras
Returns API eosscan - processar transacoes.
43 44 45 46 47 48 49 50 51 |
# File 'lib/eost/bigquery.rb', line 43 def transacoes @transacoes ||= Carteiras.new( { wb: sql("select * from #{BD}.walletEos order by 1").map { |e| { ax: e[:weos], sl: e[:eos].to_d } }, nt: sql("select blocknumber,iax from #{BD}.eostx order by 1") }, linha ) end |