google-bigquery
Integration av Googles BigQuery med webbapplikation
Sök…
Integration av Googles BigQuery API med webbapplikation
I den här tutorialen kommer jag att förklara hur man integrerar Googles BigQuery API med webbapplikationen. Min webbapplikation kommer att hämta data med hjälp av BigQuery och plotta ett diagram med d3.js och Javascript.
Varje projekt på Google Developers Console har ett klient-ID och du måste kopiera klient-ID och sätta det som en konfigurering:
var gconfig = {
'client_id': 'ClientID',
'scope': 'https://www.googleapis.com/auth/bigquery'
};
BigQuery API kan nås på följande sätt:
$.getScript("https://apis.google.com/js/client.js", function(d) {
function loadGAPI() {
setTimeout(function() {
if (!gapi.client) {
loadGAPI();
} else {
loadBigQuery();
}
}, 500);
}
function loadBigQuery() {
gapi.client.load('bigquery', 'v2');
setTimeout(function() {
if (!gapi.client.bigquery) {
loadBigQuery();
} else {
onClientLoadHandler();
}
}, 500);
}
loadGAPI();
});
Du måste också nämna frågan som du ska hämta data:
function runQuery() {
var request = gapi.client.bigquery.jobs.query({
'projectId': "bigdatameetup-83116",
'timeoutMs': '30000',
'query': 'SELECT DATE(date ) as date,SUM(INTEGER(orders)) as total_orders FROM [bigdatameetup-83116:Demo_Backup.orders] GROUP BY date ORDER BY date LIMIT 1000; '
});
request.execute(function(response) {
var bqData = [];
response.result.rows.forEach(function(d) {
bqData.push({"date": d3.time.format("%Y-%m-%d").parse(d.f[0].v),
"total_orders": +d.f[1].v});
});
drawLineChart(bqData);
});
}
Resten är visualiseringen, dvs. skapandet av linjediagram med hjälp av d3.js:
function drawLineChart(bqData) {
var WIDTH = config.width, HEIGHT = config.height;
var Y_AXIS_LABEL = "total_orders";
var X_DATA_PARSE = d3.time.format("%d-%b-%y").parse;
var Y_DATA_PARSE = vida.number;
var X_DATA_TICK = d3.time.format("%b-%y");
var X_AXIS_COLUMN = "date";
var Y_AXIS_COLUMN = "total_orders";
var margin = {top: 20, right: 20, bottom: 30, left: 50},
width = WIDTH - margin.left - margin.right,
height = HEIGHT - margin.top - margin.bottom;
var x = d3.time.scale()
.range([0, width]);
var y = d3.scale.linear()
.range([height, 0]);
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom")
.tickFormat(X_DATA_TICK);
var yAxis = d3.svg.axis()
.scale(y)
.orient("left")
.tickFormat(function(d) {
return d / 1000000 + "M";
});
var line = d3.svg.line()
.interpolate("basis")
.x(function(d) { return x(d.x_axis); })
.y(function(d) { return y(d.y_axis); });
var svg = d3.select("#canvas-svg").append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
bqData.forEach(function(d) {
d.x_axis = d[X_AXIS_COLUMN];
d.y_axis = d[Y_AXIS_COLUMN];
});
bqData.sort(function(a, b) {
return (new Date(a.x_axis)) - (new Date(b.x_axis));
});
x.domain(d3.extent(bqData, function(d) { return d.x_axis; }));
y.domain(d3.extent(bqData, function(d) { return d.y_axis; }));
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
svg.append("g")
.attr("class", "y axis")
.call(yAxis)
.append("text")
.attr("transform", "rotate(-90)")
.attr("y", 6)
.attr("dy", ".71em")
.style("text-anchor", "end")
.text(Y_AXIS_LABEL);
svg.append("path")
.datum(bqData)
.attr("class", "line")
.attr("d", line);
}
I det här exemplet har jag valt 'Belopp' som x-axel och 'Datum' som y-axel från det offentliga datasättet:
nyc_taxi_public
Du hittar hela arbetsprovet i den här länken.
BigQuery Integration with WebApplication
Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow