GVKun编程网logo

需要在 Java 中传递 Bigquery Array of Struct 参数(java中传递参数的两种方式)

1

关于需要在Java中传递BigqueryArrayofStruct参数和java中传递参数的两种方式的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于(C)用bsearch在struct数组

关于需要在 Java 中传递 Bigquery Array of Struct 参数java中传递参数的两种方式的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于(C) 用 bsearch 在 struct 数组中按名称查找 struct、Angular10 与 BigQuery,拒绝访问:BigQuery BigQuery:获取云端硬盘凭据时权限被拒绝、array – 为什么`Array(0,1,2)== Array(0,1,2)`不返回预期的结果?、BigQuery 错误:拒绝访问:BigQuery BigQuery:获取云端硬盘凭据时权限被拒绝等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

需要在 Java 中传递 Bigquery Array of Struct 参数(java中传递参数的两种方式)

需要在 Java 中传递 Bigquery Array of Struct 参数(java中传递参数的两种方式)

如何解决需要在 Java 中传递 Bigquery Array of Struct 参数

我有一些要求,我必须将结构数组作为参数传递,然后与主表连接。以不同的方式,我有我传递的 x 列和 y 列的值列表,然后将传递值的 x 列连接到主表的 x 列,但无法做到这一点。我必须使用java代码传递参数。我的 sql 查询如下所示。

  1. select i.x,z.y,COUNT(*) AS countTotal
  2. from `table` i
  3. inner join UNnesT(ARRAY<STRUCT<x STRING,y STRING>>[(''a1'',''b1''),(''a2'',''b2''),(''a3'',''b3'')]) z ON i.x = z.x
  4. WHERE ( z.y=''b1'' )
  5. OR (z.y=''b2'')
  6. OR (z.y=''b3'')
  7. group by i.x,z.y
  8. order by i.x;

我需要在 Java 中将内部连接部分作为参数传递,基本上在行下方

  1. ARRAY<STRUCT<x STRING,''b3'')]

谢谢 拉维兰詹

(C) 用 bsearch 在 struct 数组中按名称查找 struct

(C) 用 bsearch 在 struct 数组中按名称查找 struct

如何解决(C) 用 bsearch 在 struct 数组中按名称查找 struct

我正在尝试实现函数 (1),以便在 struct 数组中按名称查找特定产品。 p_array 是包含 n 个产品的结构体数组,search_key 是指向具有搜索结构名称的字符串的指针 cmp 是指向我已实现的另一个函数 (2) 的指针。

/* (1) */
const Product* findProduct(const Product* p_array,const char* search_key,int (*cmp)(const void*,const void*))
{
    return bsearch(&search_key,p_array,100,sizeof(Product),cmp);
    
}

/* (2) */
int compareAlpha(const void* a,const void* b)
{
    const struct Product *shop_a = a;
    const struct Product *shop_b = b;

    int ret = strcmp(shop_a->name,shop_b->name);
    
    return ret;
}

我有以下问题:

  1. 我想不出办法找出 p_array 的长度
  2. 启动程序导致分段错误,我不知道为什么

我的主要功能是:

void printProducts(Product* array)
{
    int i = 0;
    while(array[i].name[0] != 0)
    {
        printf("product: %s\\tprice: %f\\t in stock: %d\\n",array[i].name,array[i].price,array[i].in_stock);
        i++;
    }
}

int main()
{
    Product array[6] = {
    {"peanut butter",1.2,5},{"cookies",12.3,23},{"cereals",3.2,12},{"bread",2.7,{"butter",4.2,{"\\0",0.0,0}
    };

    qsort(array,5,compareAlpha);
    printf("sorted lexically:\\n");
    printProducts(array);
    
    const Product* search = findProduct(array,"cookies",compareAlpha);
    if(search)
    {
        printf("Found product:\\n");
        printf("%s\\n",search->name);
    }

    qsort(array,compareNum);
    printf("sorted by in stock:\\n");
    printProducts(array);

    return 0;
}

想要的输出是

sorted lexically:
product: bread price: 2.700000 in stock: 12
product: butter price: 4.200000 in stock: 5
product: cereals price: 3.200000 in stock: 12
product: cookies price: 12.300000 in stock: 23
product: peanut butter price: 1.200000 in stock: 5
Found product:
cookies
Product not found!
sorted by in stock:
product: cookies price: 12.300000 in stock: 23
product: bread price: 2.700000 in stock: 12
product: cereals price: 3.200000 in stock: 12
product: butter price: 4.200000 in stock: 5
product: peanut butter price: 1.200000 in stock: 5

解决方法

您的代码中有几个错误:

  1. 无法在您的 compareAlpha() 函数中进行转换。你应该写const struct Product* shop_a = (const struct Product*)a;
  2. 在您的 printProducts() 函数中,您应该将 array[i].name[0] 与空字符 ''\\0'' 进行比较,而不是 0,即 while(array[i].name[0] != ''\\0'')
  3. array 函数中传递参数 printProducts() 会生成警告。您将 array 声明为静态数组而不是指针(尽管它是固有实现的并且可以作为指针访问),这会生成警告。你应该像这样传递它 void printProducts(Product array[])
  4. findProduct() 函数中,当您调用 bsearch() 函数时,您将要搜索的参数作为 &search_key 传递。您应该在没有 & 的情况下传递它。
  5. findProduct() 的返回类型应该是 void* 而不是 const Product*,因为 bsearch() 函数的返回类型是 void*。所以,在你得到一个返回值之后 findProduct() 函数,您需要将其类型转换为 const Product*
  6. 您在某些地方使用 struct 类型时没有使用 Product 关键字。在 C++ 中,它是可选的,但在 C 中它是强制性的。

  1. 我想不出办法找出 p_array 的长度

您可以像这样找到数组的大小 int size = sizeof(array) / sizeof(array[0]); 虽然不推荐这样做,因为它依赖于编译器。


  1. 启动程序导致分段错误,我不知道为什么

以下是修正了所有上述错误/警告的完整代码。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Product{
    char name[100];
    double price;
    int in_stock;
};

int compareAlpha(const void* a,const void* b)
{
    const struct Product* shop_a = (const struct Product*)a;
    const struct Product* shop_b = (const struct Product*)b;

    int ret = strcmp(shop_a->name,shop_b->name);

    return ret;
}

int compareNum(const void* a,const void* b)
{
    const struct Product* shop_a = (const struct Product*)a;
    const struct Product* shop_b = (const struct Product*)b;

    int ret = shop_a->in_stock <= shop_b->in_stock;

    return ret;
}

void* findProduct(struct Product p_array[],const char* search_key,int (*cmp)(const void*,const void*))
{
    return bsearch(search_key,(void*)p_array,5,sizeof(struct Product),cmp);

}



void printProducts(struct Product array[])
{
    int i = 0;
    while(array[i].name[0] != ''\\0'')
    {
        printf("product: %s\\tprice: %f\\t in stock: %d\\n",array[i].name,array[i].price,array[i].in_stock);
        i++;
    }
}

int main()
{
    struct Product array[6] = {
        {"peanut butter",1.2,5},{"cookies",12.3,23},{"cereals",3.2,12},{"bread",2.7,{"butter",4.2,{"\\0",0.0,0}
    };

    qsort(array,compareAlpha);
    printf("sorted lexically:\\n");
    printProducts(array);

    const struct Product* search = (const struct Product*)findProduct(array,"cookies",compareAlpha);
    if(search)
    {
        printf("Found product:\\n");
        printf("%s\\n",search->name);
    }else{
        printf("Product not found!\\n");
    }

    qsort(array,compareNum);
    printf("sorted by in stock:\\n");
    printProducts(array);

    return 0;
}

Angular10 与 BigQuery,拒绝访问:BigQuery BigQuery:获取云端硬盘凭据时权限被拒绝

Angular10 与 BigQuery,拒绝访问:BigQuery BigQuery:获取云端硬盘凭据时权限被拒绝

如何解决Angular10 与 BigQuery,拒绝访问:BigQuery BigQuery:获取云端硬盘凭据时权限被拒绝

我正在使用“@google-cloud/bigquery”将 Angular10、Firebase 与 BigQuery 集成。 我在我的项目中创建了一个函数文件夹,并在其中添加了在 Google Cloud Console 上生成服务帐户 json 后获得的密钥 json 文件。

我的 BigQuery 仪表板中有 2 个数据集,其来源是 Google Drive。但是当我尝试查询这些表时出现错误。

在我的函数文件夹中有 index.js 文件,我在其中使用以下内容初始化我的 BigQuery 客户端:

  1. const bigqueryClient = new BigQuery({
  2. keyFilename:''./<name of key Json file from servie account>'',scopes:[''https://www.googleapis.com/auth/drive.readonly''],projectId:<Project-id>
  3. });

我收到的错误: “访问被拒绝:BigQuery BigQuery:获取云端硬盘凭据时权限被拒绝。”

此外,如果我在初始化大查询客户端时删除了 projectId,控制台上会记录以下错误:

抱歉,我们无法在没有项目 ID 的情况下连接到云服务\\n。您可以使用名为\\n“GOOGLE_CLOUD_PROJECT”的环境变量来指定一个

有人可以帮我吗?

array – 为什么`Array(0,1,2)== Array(0,1,2)`不返回预期的结果?

array – 为什么`Array(0,1,2)== Array(0,1,2)`不返回预期的结果?

据我所知,Scala的==定义了两个对象的自然相等。

我期望Array(0,1,2)== Array(0,2)比较自然等式。例如,检查与其他数组的相应元素相比,数组的所有元素是否都返回true。

人们告诉我,Scala的数组只是一个Java [],只比较身份。是不是更有意义的重写Array’sequals方法比较自然平等?

解决方法

Scala 2.7试图向Java []数组添加功能,并且遇到了有问题的角落。 Scala 2.8声明Array [T]是T [],但它提供包装器和等效。

尝试下面2.8(编辑/注:从RC3,GenericArray是ArraySeq – 感谢retronym指出这一点):

import scala.collection.mutable.{GenericArray=>GArray,WrappedArray=>WArray}
scala> GArray(0,2) == GArray(0,2)
res0: Boolean = true

scala> (Array(0,2):WArray[Int]) == (Array(0,2):WArray[Int])
res1: Boolean = true

GenericArray的行为就像Array,除了所有的Scala集合好处添加进来。WrappedArray wraps Java [] array;上面,我把一个简单的数组给它(比调用隐式转换函数容易),然后比较包装的数组。这些包装,尽管支持一个[]数组,也给你所有的收集好东西。

BigQuery 错误:拒绝访问:BigQuery BigQuery:获取云端硬盘凭据时权限被拒绝

BigQuery 错误:拒绝访问:BigQuery BigQuery:获取云端硬盘凭据时权限被拒绝

如何解决BigQuery 错误:拒绝访问:BigQuery BigQuery:获取云端硬盘凭据时权限被拒绝

我正在尝试将数据洞察报告连接到一个表和一个来自 BigQuery 的视图。 在 BigQuery 中,该表从位于我的云端硬盘中的 GoogleSheet 接收数据,该视图正在查询同一个表,但添加了一些新字段。 当我尝试将图表连接到这些数据源之一时,出现以下错误:

BigQuery 错误:拒绝访问:BigQuery BigQuery:获取云端硬盘凭据时权限被拒绝。

是什么原因?我该怎么做才能解决这个问题?

我明确指出,我是工作表、BigQuery 中的项目和 DS 报告的所有者。

谢谢

解决方法

试试这个:

转到数据工作室报告并添加新数据源。选择 Google 表格连接器。这应该会打开一个新页面,您可以在其中授权 Data Studio 连接到 Google 表格。您不必实际创建数据源,但这是我发现您可以授权 Data Studio 连接到工作表的唯一方法。我相信即使通过 Bigquery 外部表访问工作表数据也需要这样做。

关于需要在 Java 中传递 Bigquery Array of Struct 参数java中传递参数的两种方式的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于(C) 用 bsearch 在 struct 数组中按名称查找 struct、Angular10 与 BigQuery,拒绝访问:BigQuery BigQuery:获取云端硬盘凭据时权限被拒绝、array – 为什么`Array(0,1,2)== Array(0,1,2)`不返回预期的结果?、BigQuery 错误:拒绝访问:BigQuery BigQuery:获取云端硬盘凭据时权限被拒绝的相关知识,请在本站寻找。

本文标签:

上一篇java.lang.IllegalStateException: FirebaseApp 被删除(javasoft删除了)

下一篇输入至少 2 个数字后要检查和激活的 Java substr(输入值至少需要8个字符长度)