#google-bigquery #dialogflow-es
#google-bigquery #dialogflow-es
Вопрос:
Я создаю чат-бота, который извлекает данные из BigQuery, но у меня возникают проблемы с типами данных в Dialogflow:
Параметрами Dialogflow являются: рейтинг (@sys.number-int), Страна (строка), Отдел (строка)
Когда я выполняю следующий код, кажется, что bigquery получает рейтинг в виде строки (страна и департамент, которые являются строками, в BigQuery работают нормально), поэтому я пробовал CAST, но безуспешно.
Может ли кто-нибудь помочь мне передать переменные INT64 в BigQuery из Dialogflow?
function buyAgainPredictor(agent) {
const OPTIONS = {
query: 'WITH pred_table AS (SELECT CAST(`request.body.queryResult.outputContexts[0].parameters.Rating´ AS INT64) as Rating, "request.body.queryResult.outputContexts[0].parameters.Department" as Department, "request.body.queryResult.outputContexts[0].parameters.Country" as Country)'
'SELECT cast(predicted_label as INT64) as predicted_label '
'FROM ML.PREDICT(MODEL Customer_feedback.recommend_model, TABLE pred_table)',
timeoutMs: 10000,
useLegacySql: false,
queryParameters: {}
Комментарии:
1. Как вы думаете, почему он получает их в виде строки?
Ответ №1:
Вы не заменяете переменные внутри строки. Попробуйте это в query
:
`WITH pred_table AS (
SELECT ${request.body.queryResult.outputContexts[0].parameters.Rating} as Rating,
"${request.body.queryResult.outputContexts[0].parameters.Department}" as Department,
"${request.body.queryResult.outputContexts[0].parameters.Country}" as Country)
SELECT cast(predicted_label as INT64) as predicted_label
FROM ML.PREDICT(MODEL Customer_feedback.recommend_model, TABLE pred_table)`
Обычно вы не хотели бы использовать пользовательский ввод в своих SQL-запросах (SQL-инъекция), проверьте документацию по параметризованным запросам. Принимая это во внимание, вы могли бы попробовать это:
const OPTIONS = {
query: `WITH pred_table AS (
SELECT @rating as Rating,
@department as Department,
@country as Country)
SELECT cast(predicted_label as INT64) as predicted_label
FROM ML.PREDICT(MODEL Customer_feedback.recommend_model, TABLE pred_table)`,
timeoutMs: 10000,
useLegacySql: false,
queryParameters: {
rating: parameters.Rating,
department: parameters.Department,
country: parameters.Country
}
}